[SPRING] URL 패턴을 기반으로 스프링 부트 필터를 적용하는 방법은 무엇입니까?
SPRINGURL 패턴을 기반으로 스프링 부트 필터를 적용하는 방법은 무엇입니까?
스프링 부트 필터를 만들었습니다. @Component 주석을 사용하여 GenericFilterBean을 구현합니다.
@Component
public class MyAuthenticationFilter extends GenericFilterBean {
...
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
...
}
}
이 필터는 Spring Boot Framework에 의해 자동으로 식별되며 모든 REST API에서 올바르게 작동합니다. 이 필터를 / api / secure / *와 같은 특정 URL 경로에만 적용하고 싶지만 올바른 방법을 찾을 수 없습니다. @WebFilter를 시도했지만 작동하지 않았습니다. XML 구성이나 서블릿 이니셜 라이저를 사용하지 않고 단지 주석 만 사용합니다.
작동 시키려면 올바른 방법은 무엇입니까?
해결법
-
==============================
1.다음과 같은 필터를 추가 할 수 있습니다.
다음과 같은 필터를 추가 할 수 있습니다.
@Bean public FilterRegistrationBean someFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(someFilter()); registration.addUrlPatterns("/url/*"); registration.addInitParameter("paramName", "paramValue"); registration.setName("someFilter"); registration.setOrder(1); return registration; } @Bean(name = "someFilter") public Filter someFilter() { return new SomeFilter(); }
-
==============================
2.OncePerRequestFilter를 확장 할 수 있다면 다른 옵션이 있습니다. 예 :
OncePerRequestFilter를 확장 할 수 있다면 다른 옵션이 있습니다. 예 :
public class SomeFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // your filter logic .... } @Override protected boolean shouldNotFilter(HttpServletRequest request) { String path = request.getServletPath(); return !path.startsWith("/api/secure/"); } }
-
==============================
3.@ user1283002 @WebFilter를 사용하는 것이 가능하다고 생각합니다. 나는이 기사를 우연히 발견했다. 기사별로 (나 자신을 시도하지 않은) :
@ user1283002 @WebFilter를 사용하는 것이 가능하다고 생각합니다. 나는이 기사를 우연히 발견했다. 기사별로 (나 자신을 시도하지 않은) :
@WebFilter(urlPatterns = "/api/count") public class ExampleFilter implements Filter{ // .......... } // and let Spring know to scan to find such @WebFilter annotation in your config // class by using the @ServletComponentScan annotation like @ServletComponentScan @SpringBootApplication public class MyApplication extends SpringBootServletInitializer { public static void main(String[] args) throws Exception { SpringApplication.run(MyApplication.class, args); } // .......... }
편집하다: @ServletComponentScan에 대한 문서를 더 읽은 후 흥미로운 면책 조항을 발견했습니다.
즉, 웹 컨테이너 (예 : Apache Tomcat)에 애플리케이션을 배치 할 때이 클래스는 Spring 프레임 워크에서 스캔되지 않으므로 해당 클래스의 스프링 구성 (있는 경우)이 적용되지 않습니다.
추가로 변경하지 않아도되는 Spring 설정이 없다면 @Component 스캔을 필터에 추가하지 않고 패키지가 @ComponentScan 주석의 경로에 있는지 확인하십시오.
from https://stackoverflow.com/questions/39710526/how-to-apply-spring-boot-filter-based-on-url-pattern by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] / api-url에는 스프링 부트 보안에 빈 필터 목록이 있습니다. (0) | 2019.02.14 |
---|---|
[SPRING] 새 스프링 데이터 JDK8 Jsr310JpaConverters가 자동으로 작동하지 않습니까? (0) | 2019.02.14 |
[SPRING] 임베디드 ActiveMQ의 시작 오류 : 임시 저장소 제한은 51200MB입니다. (0) | 2019.02.14 |
[SPRING] Spring MVC - 요청 매핑, 두 개의 다른 매개 변수가있는 두 개의 URL (0) | 2019.02.14 |
[SPRING] Spring @ Transactional 및 JDBC autoCommit (0) | 2019.02.14 |