2017-08-22 21 views
1

私はspring-boot-starter-webを使って、tomcat8にデプロイされたwarアプリを作成しています。basic-authでサーブレットのTomcatでセッションを防止する方法は?

各サーブレットリクエストでbasic-authenticationを強制的に実行し、guiを保護するために@EnableWebSecurityがあります。

主な目的は、主にプログラムによってアクセスされるWebサービスXMLを提供することです。したがって、クライアントはGET要求を常にbasic-authで送信します。

問題:tomcatはリクエストごとに新しいセッションを作成します。クライアントがプログラムでXMLサーブレットに接続すると、セッションは決してでログアウトされます。。また、次のクライアント要求が再度基本認証を送信するときに再利用されません。

これらのセッションは、タイムアウト(例:デフォルトの30分)までTomcatに存在します。その間に記憶を消費する。

質問:basic-auth httpヘッダーを提供する接続がセッションを作成する必要がないということを、tomcatまたはspring-servletにどのように伝えることができますか?ユーザーを認証し、応答を送信し、セッション情報を忘れるだけですか?

+0

https://stackoverflow.com/questions/2255814/can-i-turn-off-the-httpsession-in-web-xml – StanislavL

+0

あなたは 'SessionCreationPolicy.STATELESS'の使用を意味する場合:これを特定のパスのみに適用するにはどうしたらいいですか?例えば '/ gui'パスをステートフルなままにしておきますか? – membersound

答えて

0

あなたは春のセキュリティのHttpSessionを作成することはありません、それはあなたのWebSecurityConfigurationなどでそれを設定したSecurityContext

を得るためにそれを使用することはありません

SessionCreationPolicy.STATELESS

にセッション作成ポリシーを設定することができます。

http.antMatcher("/api/**") 
       .sessionManagement() 
       .sessionCreationPolicy(SessionCreationPolicy.STATELESS); 
0

SessionCreationPolicy.NEVERが正解です。デフォルトでセッションを作成しないためです。しかし、セッションが要求された場合(例えば、my/guiパスのフォームログインのために)、それが使用されます。

このように、プログラムによるリクエストはセッションを作成しません。しかし、Webブラウザ内でテストされた場合(基本認証を提供するフォームログインによって保護されている場合)、セッションが作成されます。ブラウザ内から要求を送信するたびに基本認証資格情報を入力する必要がないため、望ましい動作です。

http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);

+1

セッション作成ポリシーがすべてのケースで機能していることが分かりましたが、http.antMatcher( "/ api/**")などのさまざまなエンドポイントセットで異なるポリシーを適用することもできます。sessionManagement()。sessionCreationPolicy() .....) '。 –

関連する問題