반응형
봄 보안에서 커스텀 필터를 작성하는 방법은?
저는 요청별로 정보를 받고 싶어서 요청별로 기능을 가지고 요청별로 정보를 얻는 것보다는 필터를 가지고 있는 것이 좋다고 생각합니다.
그래서 모든 요청은 그 필터를 통과하고 저는 제가 원하는 것을 얻습니다.
문제는 다음과 같습니다.사용자 정의 필터를 작성하려면 어떻게 해야 합니까?
사전 정의된 스프링 보안 필터와 다르며 완전히 새로운 제품이라고 가정합니다.
표준 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>
또한 성공적으로 로그인한 후에 호출될 핸들러를 추가할 수 있습니다(SavedRequestAware를 확장해야 함).인증성공 처리자).이걸 어떻게 하는지 보세요.그리고 저는 이것이 더 좋은 생각이라고 생각합니다.
업데이트됨:
또는 다음과 같은 보안 필터 끝에 이 필터를 배치할 수도 있습니다.
<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
}
이것을 섞는 것만으로, 사용하는 것은 어떻습니까?custom-filter
안에서.http
요소:
<security:http auto-config="false" ...>
...
<security:custom-filter position="FORM_LOGIN_FILTER" ref="MyCustomFilter" />
</security:http>
언급URL : https://stackoverflow.com/questions/11928637/how-to-write-a-custom-filter-in-spring-security
반응형
'programing' 카테고리의 다른 글
요소의 아래쪽 및 오른쪽 위치 가져오기 (0) | 2023.10.10 |
---|---|
SQL 쿼리를 실행하지 않고 테스트하는 명령이 있습니까? (MySQL 또는 ANSI SQL ) (0) | 2023.10.10 |
Jestwatch에서 파일을 제외하려면 어떻게 해야 합니까? (0) | 2023.10.10 |
java.sql.SQL 비일시적 연결예외. (0) | 2023.10.10 |
SQL 쿼리 결과를 보고서 양식 테이블에 출력하는 방법은 무엇입니까? (0) | 2023.10.10 |