Custom AuthenticationFilter и WebSecurityConfigurerAdapter.configure - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь настроить пользовательский фильтр аутентификации для токенов JWT в моем классе конфигурации, который расширяет WebSecurityConfigurerAdapter.

Моя текущая конфигурация такая:

    @Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .addFilterBefore(authenticationFilter(), BasicAuthenticationFilter.class)
            .authenticationProvider(provider())
            .authorizeRequests()
            .antMatchers("/register**").permitAll()
            .antMatchers("/login*").permitAll()
            .antMatchers(HttpMethod.GET,"/api/books**").permitAll()
            .antMatchers(HttpMethod.PUT,"/api/books**").authenticated()
            .and()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
    ;
}

authenticationFilter () возвращает экземпляр моего JWTAuthenticationFilter

JWTAuthenticationFilter расширяет AbstractAuthenticationProcessingFilter.

Чего я не получаю, так это того, что метод requireAuthentication от AbstractAuthenticationProcessingFilter просто проверяет путь запроса на соответствие предоставленному requireAuthenticationRequestMatcher.

protected boolean requiresAuthentication(HttpServletRequest request, HttpServletResponse response) {
    return this.requiresAuthenticationRequestMatcher.matches(request);
}

requireAuthenticationRequestMatcher является аргументом конструктора для AbstractAuthenticationProcessingFilter. Теперь нет ничего сложного в том, чтобы переопределить метод requireAuthentication и указать там соответствующие пути, но я чувствую, что подходящим местом для этого был бы мой класс конфигурации. У меня вопрос, в чем смысл

.addFilterBefore(authenticationFilter(), BasicAuthenticationFilter.class)
        .authenticationProvider(provider())
        .authorizeRequests()
        .antMatchers("/register**").permitAll()
        .antMatchers("/login*").permitAll()
        .antMatchers(HttpMethod.GET,"/api/books**").permitAll()
        .antMatchers(HttpMethod.PUT,"/api/books**").authenticated()

если мне все-таки понадобится реализовать "requiredAuthentication"? Я настраиваю это неправильно, или в случае пользовательских AuthenticationFilters, соответствующие пути всегда должны быть определены в фильтре?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...