[SPRING] 봄 보안 사용자 정의 필터를 작성하는 방법?
SPRING봄 보안 사용자 정의 필터를 작성하는 방법?
요청마다 약간의 정보를 받고 싶습니다. 그래서 각 요청에 대한 기능을 가지고 요청에서 정보를 개별적으로 얻는 대신 필터가있는 것이 좋습니다. 그래서 모든 요청은 필터를 통과해야하고 나는 원하는 것을 얻습니다. 질문 : 맞춤 필터를 작성하려면 어떻게해야합니까? 미리 정의 된 스프링 보안 필터와 같지 않으며 완전히 새로운 것입니다.
해결법
-
==============================
1.표준 Java 필터를 사용할 수 있습니다. web.xml의 인증 필터 다음에 배치하십시오 (필터 체인에서 나중에 실행되며 보안 필터 체인 이후에 호출 됨).
표준 Java 필터를 사용할 수 있습니다. 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 } }
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>
또한 성공적인 로그인 후에 호출되는 핸들러를 추가 할 수 있습니다 (SavedRequestAwareAuthenticationSuccessHandler를 확장해야 함). 이걸 어떻게하는지보십시오. 그리고 이것이 더 좋은 아이디어라고 생각합니다.
업데이트 : 또는 다음과 같이 보안 필터의 끝에이 필터를 사용할 수 있습니다.
<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 }
-
==============================
2.그냥 믹스에 던져; http 요소 내부에서 사용자 정의 필터를 사용하는 방법 :
그냥 믹스에 던져; http 요소 내부에서 사용자 정의 필터를 사용하는 방법 :
<security:http auto-config="false" ...> ... <security:custom-filter position="FORM_LOGIN_FILTER" ref="MyCustomFilter" /> </security:http>
from https://stackoverflow.com/questions/11928637/how-to-write-a-custom-filter-in-spring-security by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @ComponentScan의 특정 패키지 필터링 (0) | 2018.12.10 |
---|---|
[SPRING] Join 테이블의 추가 속성을 위해 많은 수의 최대 절전 모드 매핑을 만드는 방법은 무엇입니까? (0) | 2018.12.10 |
[SPRING] Spring에서 런타임시 빈을 동적으로 선언한다. (0) | 2018.12.10 |
[SPRING] 봄 3 mvc, 올바른 구문을 사용하여 양식지지 개체로 <Foo> 목록? (0) | 2018.12.10 |
[SPRING] 서블릿 필터에서 Spring 빈을 얻으려면 어떻게해야합니까? (0) | 2018.12.09 |