programing

Spring Boot 응용 프로그램에서 Servlet 필터 실행 순서를 정의하는 방법

instargram 2023. 2. 26. 09:00
반응형

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사용.AnnotationAwareOrderComparatorservlet 콘텍스트에 적용하기 전에 설정해 주세요.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

반응형