2012-03-09 5 views
4

私はWebアプリケーション用のスプリングセキュリティ3.1を使用しています。Spring Security 3.1 - ユーザーを識別する方法は、すでにログインしているかどうか?

リクエストされたURLのフィルタリングを提供するためにカスタムフィルタを実装しました。

ユーザーがログインしてからユーザーがログインURLにアクセスすると、その時点でログインURLを開くべきではありません。私はどのようにユーザーが既にログインしているかどうかを確認できますか?

ユーザーが既にログインしている場合は、ログインページを開くべきではありません。 default-target-urlページが開きます。

ありがとうございました。

答えて

4

クラスの静的メソッドを使用して、Security Context から認証オブジェクトを取得し、ユーザーが現在ログインしているかどうかを確認できます。

+0

あなたの答えをありがとう。 しかし、私の問題は、ユーザーが既にログインしている場合、ログインページを表示しないことです。ログインページのメインページ(ログイン後に来るページ)が表示されるはずです。 可能であれば、事前認証フィルタを使用してこの問題を解決してください。 ありがとうございます。 –

0

これを試してみてください:

Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 
if (authentication == null) { 
//not authorized 
} 
Object principalObject = authentication.getPrincipal(); 
if (principalObject == null) { 
//not authorized 
} 

それとも、セキュリティを設定することができ、私はこれがあなたのApplicationContextに必要なものだと思う:

<security:http auto-config="true" authentication-manager-ref="authenticationManager"> 
     <!-- Don't set any role restrictions on login.jsp and index.jsp --> 
     <security:intercept-url pattern="/login" 
           access="IS_AUTHENTICATED_ANONYMOUSLY"/> 
     <security:intercept-url pattern="/urlOfAView" 
           access="IS_AUTHENTICATED_ANONYMOUSLY"/> 

     <!-- Restrict access to ALL other pages --> 
     <security:intercept-url pattern="/**" access="ROLE_USER"/> 

     <!-- Set the login page and what to do if login fails --> 
     <security:form-login login-page="/login" 
          authentication-failure-url="/login?login_error=1" default-target-url="/loginUser"/> 

     <!-- Set the logout page and where to go after logout is successful --> 
     <security:logout logout-success-url="/index"/> 
    </security:http> 

私は春3.1を使用するので、私の名前空間は、次のとおりです。

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:security="http://www.springframework.org/schema/security" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security-3.1.xsd 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
     "> 

幸運

+0

あなたの答えをありがとう。 しかし、私の問題は、ユーザーが既にログインしている場合、ログインページを表示しないことです。ログインページのメインページ(ログイン後に来るページ)が表示されるはずです。 可能であれば、事前認証フィルタを使用してこの問題を解決してください。 ありがとうございます。 –

+0

私は自分の答えを更新しました。アプリケーションコンテキストに設定を追加すると、インデックスページにアクセスすると、あなたが認証されているかどうかが確認されます。あなたがそうでなければ、ログインページにあなたをリダイレクトします。また、[Security Namespace Configuration](http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config。)を参照することもできます。html) –

+0

あなたの返事に感謝します。 しかし、私はそれも副節です。ユーザーが既にログインしている場合、ログインページは開かれませんが、ターゲットURLは開かれます。 ありがとうございます。 –

4

私は全く同じ問題を解決する方法を探していました。私は次のことをやった:

しかし、私は確かにこれを達成するためのより構成可能な方法が願っています。

0

私は現在同様の機能を書いています。私の場合、私はちょうどセキュリティ設定を春にこのコードを追加:もちろん

<http pattern="/**" auto-config="false" use-expressions="true" > 

<intercept-url pattern="/login" access="!isAuthenticated()" /> 
<access-denied-handler error-page="/"/> 

<!-- More configuration here --> 

</http> 

この設定はすべてのあなたのメインページへのリクエスト「アクセスを拒否」にリダイレクトします。ログインページにのみ異なるリダイレクトが必要な場合は、独自のアクセス拒否ハンドラの実装を提供する必要があります。

関連する問題