부팅 시 스프링 보안 필터 체인 전에 필터 호출
아래와 같이 필터를 구성했지만 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
이러한 속성은 수시로 변경되며 여기에서 확인할 수 있습니다.
제가 직접 한 것은 아니지만 코드를 보니 보안 필터 순서에 대한 속성을 설정하면 됩니다.예를 들어 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
'programing' 카테고리의 다른 글
인스턴스 수준에서 메서드 재정의 (0) | 2023.07.27 |
---|---|
캔버스의 컨텍스트를 가져오는 것과 동일한 jQuery (0) | 2023.07.27 |
파일 경로에서 이미지 보기를 표시하시겠습니까? (0) | 2023.07.27 |
재설정 인덱스 이름을 지정할 수 있습니까? (0) | 2023.07.27 |
Python - 파일 사용 시기 vs 오픈 (0) | 2023.07.27 |