バックグラウンド
こんにちは、 をSpring
使用するプロジェクトがありますSpring security
。定義することにより、セキュリティ フィルターを定義しました。
<b:bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy">
とfilter-chain-map
そして、web.xml
私たちはそうします
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
そしてそれはすべてうまくいきます:)。 次の次の行Spring session
に従って接続redis
するときdoc
<context:annotation-config />
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
filter
名前付きを作成しますspringSessionRepositoryFilter
。したがって、基本的に私たちが行ったことは、すべてのカスタムで、そのフィルターを最初filter-chain
のフィルターとして追加することです。すなわち:
<b:bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy">
<filter-chain-map request-matcher="ant">
<filter-chain pattern="/api/someapieformobilelogin" filters="none" /> <!-- no filter on login -->
<filter-chain pattern="/api/**"
filters="springSessionRepositoryFilter, securityContextFilter,and some other spring security filter />
<filter-chain pattern="/**"
filters="springSessionRepositoryFilter, securityContextFilter,and some other spring security filter />
結果: アプリは正常に動作しているようで、と通信してmonitoring
いることもredis-cli
示されています。spring
redis
質問
springSessionRepositoryFilter
中の使用filter-chain
は大丈夫ですか?または、フィルタリングシステムを悪用しましたか?
ありがとう、
オーク
編集
Authenticate
上記は、コードからユーザーに希望する場合には機能しないようです。
Authentication authentication = authenticationManager
.authenticate(authenticationToken);
SecurityContext securityContext = SecurityContextHolder
.getContext();
securityContext.setAuthentication(authentication);
失敗します。filter-chain
たぶん、経由で実行するのに十分ではないからですorg.springframework.security.web.FilterChainProxy
。
filter
のように実行するとどう思いますweb.xml
か?
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上記は強制的springSessionRepositoryFilter
に前に実行さspringSecurityFilterChain
れますが、この例org.springframework.web.filter.DelegatingFilterProxy
では 2 回呼び出されています。springSessionRepositoryFilter
アウトフィルターの前にフィルターとして実行する他の方法はありspringSecurityFilterChain
ますか?