복붙노트

[SPRING] 하나의 특수 경로에만 필터를 추가하는 방법 WebSecurityConfigurerAdapter

SPRING

하나의 특수 경로에만 필터를 추가하는 방법 WebSecurityConfigurerAdapter

우리는 다음과 같은 구성을 가지고 있습니다 :

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    public static final String LOGIN_PATH_EXPRESSION = "/login";
    public static final String API_PATH_EXPRESSION = "/api/**/*";
    public static final String GLOBAL_PATH_EXPRESSION = "/**/*";

    @Autowired
    @Qualifier("ssoFilter")
    private Filter ssoFilter;

    @Autowired
    private VerifyingProcessingFilter verifyingProcessingFilter;


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .userDetailsService(username -> new User(username, "", Collections.emptyList()))
            .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            .authorizeRequests()
                .antMatchers(LOGIN_PATH_EXPRESSION)
                .authenticated()
                .and()
                .httpBasic()
                .and()
                .authenticationProvider(new SimpleAuthenticationProvider())
            .authorizeRequests()
                .antMatchers(API_PATH_EXPRESSION).authenticated()
                .and()
                .addFilterBefore(ssoFilter, BasicAuthenticationFilter.class)
                .addFilterAfter(verifyingProcessingFilter, FilteredOAuth2AuthenticationProcessingFilter.class)
            .authorizeRequests()
                .antMatchers(GLOBAL_PATH_EXPRESSION)
                .permitAll()
                .and()
                .csrf()
                .disable();
    }

/ logincall에서 FilteredOAuth2AuthenticationProcessingFilter의 내부에서 끝내고 왜 이것이 일어나는지 물어 보았습니다.

목표는 ssoFilter 및 verifyingProcessingFilter가 api / ** / * 경로로 끝점을 지정할 때만 적용되도록하는 것입니다.

바로 지금 우리는 AntMatching 체크를 필터 안에 추가해야만 올바른 요청에만 적용될 수 있지만 일치하는 요청에만 추가 할 수 있어야한다고 가정합니다.

특정 Ant Matching 경로 요청에 필터를 추가하는 방법에 대한 예제를 제공 할 수 있습니까?

해결법

  1. ==============================

    1.단일 Configuration 클래스로는 그렇게 할 수없는 것처럼 보입니다. 이 질문을보십시오 : 보안 된 엔드 포인트에서만 스프링 보안 필터를 적용하는 방법.

    단일 Configuration 클래스로는 그렇게 할 수없는 것처럼 보입니다. 이 질문을보십시오 : 보안 된 엔드 포인트에서만 스프링 보안 필터를 적용하는 방법.

    이 경우 더 나은 솔루션은 여러 개의 HttpSecurity를 ​​구성하는 것입니다. Spring IO 문서에서 :

    설명서에는이를 수행하는 데 필요한 단계가 포함 된 전체 예제가 있습니다.

    행운을 빕니다!

  2. from https://stackoverflow.com/questions/45820372/how-to-add-a-filter-only-for-one-special-path-websecurityconfigureradapter by cc-by-sa and MIT license