バックグラウンド
こんにちは、 を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示されています。springredis
質問
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ますか?