リクエストごとにいくつかの情報を受け取りたいので、リクエストごとに機能を持たせ、リクエストからこれらの情報を別々に取得するのではなく、の方が良いでしょう。
すべてのリクエストがそのフィルタを通過し、私が望むものが得られます。
質問:私はどのようにカスタムフィルタを書くことができますか?
あらかじめ定義されたスプリングセキュリティフィルタと似ていないものとし、まったく新しいものとします。春のセキュリティでカスタムフィルタを書くには?
41
A
答えて
42
標準のJavaフィルタを使用できます。 web.xmlに認証フィルタの後に置くだけです(これは、後でフィルタチェーンに入り、セキュリティフィルタチェーンの後に呼び出されることを意味します)。 web.xmlファイルの
public class CustomFilter implements Filter{
@Override
public void destroy() {
// Do nothing
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Set<String> roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities());
if (roles.contains("ROLE_USER")) {
request.getSession().setAttribute("myVale", "myvalue");
}
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// Do nothing
}
}
フラグメント:
<!-- The Spring Security Filter Chain -->
<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>
<!-- Your filter definition -->
<filter>
<filter-name>customFilter</filter-name>
<filter-class>com.yourcompany.test.CustomFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>customFilter</filter-name>
<url-pattern>/VacationsManager.jsp</url-pattern>
</filter-mapping>
また、あなたは(あなたがSavedRequestAwareAuthenticationSuccessHandlerを拡張する必要があります)成功したログイン後に呼び出されるハンドラを追加することができます。 Look hereこれを行う方法。そして、これはもっと良いアイデアだと思います。
それとも、このようなあなたのセキュリティフィルタの最後にこのフィルタを持つことができます:更新された
<security:filter-chain-map>
<sec:filter-chain pattern="/**"
filters="
ConcurrentSessionFilterAdmin,
securityContextPersistenceFilter,
logoutFilterAdmin,
usernamePasswordAuthenticationFilterAdmin,
basicAuthenticationFilterAdmin,
requestCacheAwareFilter,
securityContextHolderAwareRequestFilter,
anonymousAuthenticationFilter,
sessionManagementFilterAdmin,
exceptionTranslationFilter,
filterSecurityInterceptorAdmin,
MonitoringFilter"/> <!-- Your Filter at the End -->
</security:filter-chain-map>
そして、あなたのフィルターを持つことを、あなたはこれを使用することがあります。
public class MonitoringFilter extends GenericFilterBean{
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//Implement this Function to have your filter working
}
13
これをミックスに投げ込む。どうすればいいですかcustom-filter
の中にhttp
要素:
<security:http auto-config="false" ...>
...
<security:custom-filter position="FORM_LOGIN_FILTER" ref="MyCustomFilter" />
</security:http>
+1
これははるかに良い解決策です。私はそれ以外のものの前に自分自身のフィルタを実行したかったのです。
関連する問題
- 1. 春のセキュリティ、春のセキュリティでアクセス= "hasAnyRole( 'ROLE_ADMIN')
- 2. 春のセキュリティは - すでに
- 3. 春のセキュリティは
- 4. AngularJs - ディレクティブコントローラ内にカスタムフィルタを書く方法
- 5. 春のセキュリティ2.0.3と辞書の攻撃
- 6. 春のセキュリティは常に302
- 7. 春のセキュリティAuthenticatedPricipalは
- 8. 春のセキュリティ+春のブートテストコントローラ
- 9. セキュリティ:http:春のセキュリティ設定?
- 10. 春MockMVC、春のセキュリティとMockito
- 11. ジャージーと春のセキュリティで春のブートOAuth2
- 12. 春のセキュリティHTTPS
- 13. 春のセキュリティ - SecurityContextHolder
- 14. 春のセキュリティ3
- 15. 春のセキュリティ
- 16. AuthenticationSuccessHandler春のセキュリティ
- 17. 春のセキュリティuserdetails:org.springframework.security.authentication.DisabledException
- 18. 春のセキュリティ405
- 19. POSTリクエストは、春のセキュリティは
- 20. 春のセキュリティは、IISのISAPI
- 21. 春のブートのセキュリティは@Repository
- 22. 私は春・セキュリティのOAuth2 REST
- 23. 春のセキュリティ顧客トークンエンハンサーは
- 24. 春ブーツのセキュリティは戦争
- 25. 春のセキュリティ - Grailsは3.2.2 - ERR_TOO_MANY_REDIRECTS
- 26. 春のセキュリティは、HTTPログインページへ
- 27. 春のセキュリティ:プログラムでログイン
- 28. 春のセキュリティのパフォーマンス
- 29. 春のセキュリティのカスタムユーザー
- 30. 春のセキュリティprincipal.getName()リターンが参照ではなく、ユーザ名
私は答えを待っていたので、私は解決策を考え出しました。セキュリティフィルタの最後にフィルタ(拡張 'GenericFilterBean')を追加しました。それはうまく働いています。しかし、今、私はあなたの答えを見て、それは私には良い音。私はあなたの解決策を試しています。それもうまくいくと思っています。私はあなたに結果を知らせます。ありがとう。 –
一般的にあなたの答えは正しいですが、少し修正する必要があります。ご協力いただきありがとうございます。 –
私の不信を修正して、私はあなたの変更を受け入れます。私が間違っていた場所を知ることは興味深いことです。 – dimas