programing

부팅 시 스프링 보안 필터 체인 전에 필터 호출

powerit 2023. 7. 27. 22:28
반응형

부팅 시 스프링 보안 필터 체인 전에 필터 호출

아래와 같이 필터를 구성했지만 Spring Security Filter chain 이전에 호출되지 않습니다.주문을 0으로 설정했습니다.

필터에서 순서 설정을 지원하는 스프링 부트 1.3을 사용하고 있습니다.

@Bean
public FilterRegistrationBean filterRegistrationBean() {

  FilterRegistrationBean registrationBean = new FilterRegistrationBean();

  registrationBean.setFilter(new UrlRewriteFilter());
  registrationBean.addUrlPatterns("*");
  registrationBean.addInitParameter("confReloadCheckInterval", "5");
  registrationBean.addInitParameter("logLevel", "DEBUG");
  registrationBean.addInitParameter("confPath", "urlrewrite.xml");
  registrationBean.setOrder(0);

  return registrationBean;
}

application.properties

security.filter-order=5
//>spring 2.1.3
spring.security.filter-order=5

이러한 속성은 수시로 변경되며 여기에서 확인할 수 있습니다.

https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#actuator-properties

제가 직접 한 것은 아니지만 코드를 보니 보안 필터 순서에 대한 속성을 설정하면 됩니다.예를 들어 application.properties의 경우

보안 필터보다 먼저 필터를 주문해야 합니다.보안에 관한 한 이 주문을 변경하는 것이 어떤 영향을 미칠지 모르겠습니다. 저에게는 조금 위험하게 느껴집니다.Spring 개발자들 사이에 이에 대한 논의가 있습니다.그것은 결국 그들이 제가 위에서 대답한 것을 실행하는 것으로 끝납니다.

논의

https://github.com/spring-projects/spring-boot/issues/1640

이 속성의 기능을 보여주는 테스트입니다. (testCustomFilterOrder() test 검색)

https://github.com/spring-projects/spring-boot/blob/1.2.x/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/SecurityAutoConfigurationTests.java

SpringBoot 2.0에서 이를 수행하는 가장 좋은 방법은 addFilterBefore를 사용하는 Spring Security Configuration입니다.내 필터가 대체 로그인 필터였기 때문에 사용자 이름 암호 필터 이전에 수행하기로 선택했습니다.

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.addFilterBefore(new UrlRewriteFilter(), UsernamePasswordAuthenticationFilter.class)
            .authorizeRequests()
            .antMatchers(HttpMethod.OPTIONS, "/*/**").permitAll()
            .antMatchers("/api/login").permitAll()
            .antMatchers("/api/**").access("hasRole('ROLE_ADMIN')");
    }
}

application.properties 파일에서 보안 필터 체인에 대한 임의 순서를 선택하고 싶지 않으면 SecurityProperties를 사용하여 순서를 설정할 수 있습니다.DEFAULT_FILTER_ORD 값입니다.순서 값을 명시적으로 설정하지 않으므로 보안 필터 체인에서 사용하는 값입니다.

@Bean
public FilterRegistrationBean<MyFilter> myFilterRegistration() {
    FilterRegistrationBean<MyFilter> regBean= new FilterRegistrationBean<>();
    regBean.setFilter(new MyFilter());
    regBean.addUrlPatterns("/*");
    // Invoke MyFilter before the security filter chain
    regBean.setOrder(SecurityProperties.DEFAULT_FILTER_ORDER - 1);

    return regBean;
}

언급URL : https://stackoverflow.com/questions/34229750/invoke-a-filter-before-spring-security-filter-chain-in-boot

반응형