Tôi muốn nhận một số thông tin theo yêu cầu, vì vậy tôi nghĩ thay vì có chức năng cho từng yêu cầu và lấy thông tin đó từ yêu cầu riêng, thì tốt hơn là nên có bộ lọc.
Vì vậy, mọi yêu cầu sẽ vượt qua bộ lọc đó và tôi đạt được những gì tôi muốn.
Câu hỏi đặt ra là: Làm cách nào để viết bộ lọc tùy chỉnh?
Giả sử nó không giống như bất kỳ bộ lọc bảo mật mùa xuân được xác định trước nào và nó hoàn toàn mới.Làm thế nào để viết một bộ lọc tùy chỉnh trong bảo mật mùa xuân?
Trả lời
Bạn có thể sử dụng bộ lọc Java chuẩn. Chỉ cần đặt nó sau khi bộ lọc xác thực trong web.xml (điều này có nghĩa là nó sẽ đi sau trong chuỗi bộ lọc và sẽ được gọi sau chuỗi bộ lọc bảo mật).
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
}
}
Fragment của web.xml:
<!-- 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>
Ngoài ra bạn có thể thêm xử lý này sẽ được gọi sau khi đăng nhập thành công (bạn cần phải mở rộng SavedRequestAwareAuthenticationSuccessHandler). Look here cách thực hiện việc này. Và tôi nghĩ rằng đây thậm chí còn là ý tưởng tốt hơn.
CẬP NHẬT:
Hoặc bạn có thể có bộ lọc này ở phần cuối của bộ lọc bảo mật của bạn như thế này:
<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>
Và để có bộ lọc, bạn có thể sử dụng này:
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
}
Chỉ cần ném cái này vào hỗn hợp; cách sử dụng custom-filter
bên trong http
yếu tố:
<security:http auto-config="false" ...>
...
<security:custom-filter position="FORM_LOGIN_FILTER" ref="MyCustomFilter" />
</security:http>
Đây là giải pháp tốt nhất. Tôi muốn chạy bộ lọc của riêng mình trước mọi thứ khác:
- 1. Bảo mật mùa xuân: userdetails tùy chỉnh
- 2. Bảo mật mùa xuân 3.0: Làm cách nào để chỉ định URL mà bộ lọc tùy chỉnh áp dụng?
- 3. Bộ lọc IP sử dụng Bảo mật mùa xuân
- 4. Bảo mật mùa xuân 3- Cách tùy chỉnh thông số tên người dùng/mật khẩu?
- 5. Xác thực tùy chỉnhFilter Bảo mật mùa xuân 3.2
- 6. Bảo mật mùa xuân @RequestBody
- 7. Xác thực tùy chỉnh bảo mật mùa xuân và mã hóa mật khẩu
- 8. Bảo mật mùa xuân: Đặt GrantedAuthorities
- 9. Làm cách nào để viết bộ lọc tùy chỉnh HAML?
- 10. Định cấu hình bảo mật mùa xuân để sử dụng tên người dùng tùy chỉnhPasswordAuthenticationFilter
- 11. Làm cách nào để lưu trữ thông tin tùy chỉnh trong SecurityContext của bảo mật mùa xuân?
- 12. Làm thế nào để thay đổi thuật toán băm mật khẩu khi sử dụng bảo mật mùa xuân?
- 13. Bảo mật mùa xuân: Thông báo ngoại lệ tùy chỉnh từ UserDetailsService
- 14. Bảo mật mùa xuân 3.0- Tùy chỉnh Hộp thoại xác thực cơ bản http
- 15. Cấu hình bảo mật mùa xuân dựa trên mã số
- 16. mùa xuân tùy chỉnh html
- 17. Bảo mật mùa xuân null pointer exception
- 18. Mã hóa bảo mật mùa xuân MD5
- 19. Trang đăng nhập bảo mật mùa xuân
- 20. OpenID bảo mật mùa xuân - UserDetailsService, AuthenticationUserDetailsService
- 21. Bảo mật mùa xuân 3.2 Xác thực mã thông báo
- 22. Bảo mật mùa xuân oauth2 - nhận dữ liệu tùy chỉnh từ mã OAuth2 chính
- 23. Lựa chọn thay thế cho bảo mật mùa xuân ở Java (mùa xuân)
- 24. Bảo mật mùa xuân: làm thế nào để thực hiện Brute Force Detection (BFD)?
- 25. Bảo mật mùa xuân 3.0 - Cấp phép với xác thực
- 26. Ghi lại URL chuyển hướng bảo mật mùa xuân
- 27. Bảo mật mùa xuân: setUserPrincipal theo cách thủ công
- 28. Làm cách nào để truy cập vai trò trong JSP bằng bảo mật mùa xuân?
- 29. Bảo mật mùa xuân 3.1 bằng Active Directory
- 30. Phiên bảo mật mùa xuân không hợp lệ
Khi tôi đang chờ câu trả lời, tôi đã đưa ra giải pháp. Tôi đã thêm bộ lọc của mình (mở rộng 'GenericFilterBean') vào cuối bộ lọc bảo mật của mình. Nó hoạt động tốt. Nhưng bây giờ, như tôi đã thấy câu trả lời của bạn, nó có vẻ tốt hơn với tôi. Tôi đang thử giải pháp của bạn. Hy vọng nó hoạt động quá. Tôi sẽ cho bạn biết kết quả. Cảm ơn. –
Nói chung câu trả lời của bạn là chính xác, nhưng tôi phải sửa đổi nó một chút. Cảm ơn bạn đã giúp đỡ. –
Ok. Sửa đổi unswer của tôi và tôi sẽ chấp nhận các thay đổi của bạn. Sẽ rất thú vị nếu tôi biết tôi đã sai ở đâu. – dimas