URL 패턴에 따라 스프링 부트필터를 적용하는 방법
스프링 부트 필터(구)를 만들었습니다.GenericFilterBean와 함께@Component주석입니다.
@Component
public class MyAuthenticationFilter extends GenericFilterBean {
...
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
...
}
}
필터는 Spring Boot Framework에 의해 자동으로 식별되며 모든 REST API에서 정상적으로 동작합니다.이 필터를 다음과 같은 특정 URL 경로에만 적용합니다./api/secure/*올바른 길을 찾을 수가 없어요.나는 노력했다.@WebFilter하지만 그것은 작동하지 않았다.XML 구성이나 서블릿 이니셜라이저는 사용하지 않고 주석만 사용합니다.
어떻게 하면 제대로 작동할 수 있을까요?
확장 가능한 경우 다른 옵션이 있습니다.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/");
}
}
다음과 같은 필터를 추가할 수 있습니다.
@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();
}
@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);
}
// ..........
}
편집: @Servlet Component Scan 관련 문서를 자세히 읽은 후 흥미로운 면책사항을 발견했습니다.
내장된 웹 서버를 사용하는 경우에만 검색이 수행됩니다.
즉, 어플리케이션을 웹 컨테이너(예: Apache Tomcat)에 배치할 때 이 클래스는 Spring 프레임워크에 의해 스캔되지 않으므로 Spring 구성(있는 경우)이 적용되지 않습니다.
Spring 설정이 없는 경우 @Component 스캔을 필터에 추가하여 패키지가 @ComponentScan 주석 경로에 있는지 확인하는 것만으로 충분합니다.
언급URL : https://stackoverflow.com/questions/39710526/how-to-apply-spring-boot-filter-based-on-url-pattern
'codememo' 카테고리의 다른 글
| Android에서 json 생성 (0) | 2023.02.16 |
|---|---|
| Woocommerce 3+에서 라인 항목을 사용하여 프로그래밍 방식으로 주문 작성 (0) | 2023.02.16 |
| Angular에서 이진 데이터를 읽는 방법ArrayBuffer의 JS? (0) | 2023.02.16 |
| Angular JS를 사용한 모바일 애플리케이션 (0) | 2023.02.16 |
| 앵귤러 블루버드는 어떻게 사용하나요? (0) | 2023.02.16 |