TL; DR要求ごとの春のセッション作成ポリシー?
はリクエストごとに春(セキュリティ)でセッション作成ポリシーを制御することが可能ですか?
ロングバージョン...
私は、我々のアプリケーションのための通常のログインフォームのユーザー認証を使用してきました。 いくつかのコントローラは@RestControllersで、これまではクッキーによって追跡されるデフォルトのユーザーセッションが正常に動作するようになっています。
私は今@RestControllerエンドの一部を許可したい
(XHRリクエストがページから来ていたときにブラウザがいつものようにJSESSIONIDクッキーを送るようIeは、要求が以前にログインしているユーザーに認証されました)私はAPIトークン認証スキームを作成しました - これは正常に動作します。
クリーンアップの最後のビットの1つは、REST呼び出しがセッションを生成することです。可能であれば、回避したいと思います。
セッションポリシーをNEVERに設定することはできません(私はまだWebユーザーのセッションに依存しているため)。
私はIF_REQUIREDを無駄にしようとしました。
私はHttpSessionSecurityContextRepositoryを見ましたが、要求をラップし、応答がフラッシュされるたびにセッションが作成されます。
(以下スタックトレースを参照してください)
は、リクエストごとにセッション管理にフックする他の場所で、それは可能ですか?
Authentication
オブジェクトのクラスタイプに基づいて、要求の種類を簡単に区別できます。
at myapp.cfg.WebConfig$1.sessionCreated(WebConfig.java:74)
at io.undertow.servlet.core.ApplicationListeners.sessionCreated(ApplicationListeners.java:300)
at io.undertow.servlet.core.SessionListenerBridge.sessionCreated(SessionListenerBridge.java:56)
at io.undertow.server.session.SessionListeners.sessionCreated(SessionListeners.java:52)
at io.undertow.server.session.InMemorySessionManager.createSession(InMemorySessionManager.java:187)
at io.undertow.servlet.spec.ServletContextImpl.getSession(ServletContextImpl.java:741)
at io.undertow.servlet.spec.HttpServletRequestImpl.getSession(HttpServletRequestImpl.java:370)
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:270)
at org.springframework.security.web.context.HttpSessionSecurityContextRepository$SaveToSessionResponseWrapper.createNewSessionIfAllowed(HttpSessionSecurityContextRepository.java:427)
at org.springframework.security.web.context.HttpSessionSecurityContextRepository$SaveToSessionResponseWrapper.saveContext(HttpSessionSecurityContextRepository.java:364)
at org.springframework.security.web.context.SaveContextOnUpdateOrErrorResponseWrapper.onResponseCommitted(SaveContextOnUpdateOrErrorResponseWrapper.java:85)
at org.springframework.security.web.util.OnCommittedResponseWrapper.doOnResponseCommitted(OnCommittedResponseWrapper.java:245)
at org.springframework.security.web.util.OnCommittedResponseWrapper.access$000(OnCommittedResponseWrapper.java:33)
at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.flush(OnCommittedResponseWrapper.java:512)
at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.flush(OnCommittedResponseWrapper.java:513)
at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1050)
at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:953)
ありがとうKamill。これは非常に良いアプローチのようです。私はすぐにそれを試してみて、報告します。 –
幸運!それがあなたのために働くかどうか私に教えてください。 –
私はこれを行ってきましたが、正しい設定を見つけることができません。実験を行ったところ、要求ごとにHttpSecurityチェーンが1つしか使用されないようです。特定のhttp.antMatcher(...)は、APISecurityConfigurationの使用を促進します。しかし、バックエンド全体をsession-authまたはsession-lessのapiキーで保護することができるので、設定の残りの部分を重複しないようにすることはできません。 –