2016-07-22 4 views
0

誰かが私に助けてくれますか?あなたの助けに感謝。スプリングセキュリティ3.1

私は、create-session = "stateless"オプションでSpringセキュリティ3.1を使用しています。 "InsufficientAuthenticationException"をスローする:ExceptionTranslationFilterの "このリソースにアクセスするには完全な認証が必要です"。

私は何が間違っているのか、なぜこの例外が発生しているのか理解できません。この例外は資格情報が適切ではないと述べていますが、資格情報が要求を通過していることがわかります。まだ401が不正なものになっています

実際にユーザーが正しくログインできるかどうかは、&です。しかし、再び、アクセス拒否例外のためにログインページにリダイレクトしています。

ここで私は、コード

春のsecurity.xml

私の知る限りでは
<http entry-point-ref="negotiateSecurityFilterEntryPoint" 
     create-session="stateless" > 
     <intercept-url pattern="/user/loginuser" access="ROLE_ANONYMOUS"/> 
     <intercept-url pattern="/**" access="ROLE_USER"/> 
     <custom-filter ref="securityContextPersistenceFilter"   after="BASIC_AUTH_FILTER" /> 
     <custom-filter ref="ldapAuthFilter" position="CAS_FILTER" />     
     <custom-filter ref="databaseAuthFilter" position="FORM_LOGIN_FILTER" /> 
</http> 


<bean id="securityContextPersistenceFilter" class="org.springframework.security.web.context.SecurityContextPersistenceFilter"> 
     <property name='securityContextRepository'> 
      <bean class='org.springframework.security.web.context.HttpSessionSecurityContextRepository'> 
       <property name='allowSessionCreation' value='false' /> 
      </bean> 
     </property> 
    </bean> 
+0

現在の質問ではないため、質問のタイトルを実際の質問に編集してください。 – carlspring

答えて

1

を入れています、それはステートレスを行うことを意図しているまさにです。

ステートレスとしてcreate-sessionパラメータを設定すると、すべてのhttpコールでSecurityContextPersistenceFilterが呼び出されることはありません(デフォルト)。設定に応じて強制的に呼び出されても、 SecurityContextHolder内のセッションレベルのセキュリティ情報。

このステートレスパターンは、リクエストごとに認証情報と認可情報が送信されるRestスタイルのアーキテクチャで使用するためのものです。より良い、私はあなたが私はこの、Spring Security Session Managementについての良い記事を見つけました

フルステートレスなアプリケーションを開発している場合を除き、ステートレスセッション作成パターンを使用すべきだと思うのセッションが作成されると、慎重セクション 2.見ていないと述べましたか?

したがって、ステートレスセッション作成戦略は、古典的なログインフォームパターンに適合しません。

あなたのシナリオでは、ログイン要求が完了して要求が認証されると、HTTP 301または302のリダイレクトを使用してウェルカムページにリダイレクトされている可能性があります認証情報が載っていないので、再度ログインページにリダイレクトされます。

セッション作成時に単に「ifRequired」を使用するか、デフォルト値であるだけで設定しないと、ログインが正常に終了し、ログインを要求せずに正しくリダイレ​​クトされます。再び。そして、このようにしてSecurityContextPersistenceFilterを設定しないと、自動的に設定されます。

+0

ありがとうlumietu ..はい私は "ifrequired"を使用する場合は間違いなく動作するが、あなたはそれが状態のないアプリケーションと思うか?最終的にセッションを作成しているので – ashishl

+0

ログインフォームのパターンはステートレスセッションの作成には適していません。そのログインフォームをどのようにしてステートレスにするか、その他のステートレスなリクエストにすることはできません。 – ashishl

+0

ステートレスなアプリケーションをセキュリティで保護する場合は、すべての要求で認証情報を送信するか、一種のセッショントークンを使用する必要があります。 – jlumietu

関連する問題