Spring Boot 응용 프로그램에서 Servlet 필터 실행 순서를 정의하는 방법
spring boot application에서 URL 매핑이 동일한 2개의 필터 실행 순서를 설정하려고 합니다.저는 아래와 같이 메인 어플리케이션 클래스에서 필터 등록 콩 2개를 사용해 보았습니다만, 효과가 없었습니다.나는 그 것을 원한다.authorizationFilter
먼저 맞다validationFilter
. 하지만 항상 'ONLY'를 치고 있다.validationFilter
둘 다 설정되어 있는 경우.제가 코멘트를 드리자면validationFilter
, 그것은 히트합니다.authorizationFilter
.
@Bean
public FilterRegistrationBean authorizationFilter(){
FilterRegistrationBean filterRegBean = new FilterRegistrationBean();
filterRegBean.setFilter(authorizationFilter);
List<String> urlPatterns = new ArrayList<String>();
urlPatterns.add("/v1/*");
filterRegBean.setUrlPatterns(urlPatterns);
return filterRegBean;
}
@Bean
public FilterRegistrationBean validationFilter(){
FilterRegistrationBean filterRegBean = new FilterRegistrationBean();
filterRegBean.setFilter(validationFilter);
List<String> urlPatterns = new ArrayList<String>();
urlPatterns.add("/v1/*");
filterRegBean.setUrlPatterns(urlPatterns);
return filterRegBean;
}
저도 소개하려고 노력했습니다.web.xml
실행 가능한 항아리를 전쟁 파일로 변환합니다.
<web-app>
<filter>
<filter-name>authorizationFilter</filter-name>
<filter-class>com.security.filter.AuthorizationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>authorizationFilter</filter-name>
<url-pattern>/v1/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>validationFilter</filter-name>
<filter-class>com.security.validation.ValidationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>validationFilter</filter-name>
<url-pattern>/v1/*</url-pattern>
</filter-mapping>
</web-app>
단, 어플리케이션은 web.xml을 인식하지 못하는 것 같습니다.위의 설정에서는 검증 필터만 히트하기 때문입니다.이 문제를 해결하기 위한 조언에 감사드립니다.감사해요.
setOrder(int)
메서드가 작업을 수행합니다.
다음은 예시입니다.
@Configuration
@EnableAutoConfiguration
@EnableWebMvc
@ComponentScan
public class Application {
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
SecurityFilter securityFilter = new SecurityFilter();
registrationBean.setFilter(securityFilter);
registrationBean.setOrder(2);
return registrationBean;
}
@Bean
public FilterRegistrationBean contextFilterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
RequestContextFilter contextFilter = new RequestContextFilter();
registrationBean.setFilter(contextFilter);
registrationBean.setOrder(1);
return registrationBean;
}
}
Spring Boot에 의해FilterRegistrationBean
사용.AnnotationAwareOrderComparator
servlet 콘텍스트에 적용하기 전에 설정해 주세요.그RegistrationBean
현재 없습니다.Ordered
따라서 메서드를 호출하여 순서를 설정하는 방법은 없지만 서브클래스를 만들고 추가함으로써 이 문제를 해결할 수 있습니다.@Order
그 사람들한테요.나는 베이스 클래스를 만드는 것이Ordered
셋터를 제공하는 것은 프레임워크 내에서 도움이 될 것입니다(동의하면 github에서 발행).
업데이트:Ordered
는 1.0.x 로 추가되었습니다.
빈 이름을 사용하면 문제가 해결됩니다.@Bean("aFilter")
언급URL : https://stackoverflow.com/questions/22453707/how-to-define-servlet-filter-order-of-execution-in-spring-boot-application
'programing' 카테고리의 다른 글
IE8에서 각도 $q.catch() 메서드가 실패함 (0) | 2023.02.26 |
---|---|
각도 ng-참이 아닌 경우 (0) | 2023.02.26 |
Oracle에서 "<>"의 의미 (0) | 2023.02.26 |
JSON용 스트리밍 API가 있나요? (0) | 2023.02.21 |
JSON에서의 통화값 포맷의 기준은 무엇입니까? (0) | 2023.02.21 |