Я пытаюсь настроить пользовательский фильтр аутентификации для токенов 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, соответствующие пути всегда должны быть определены в фильтре?