На REST только несколько методов требуют, чтобы пользователь был авторизован. Остальные методы должны быть доступны для всех
Для авторизации написал кастомный фильтр, унаследованный от
AbstractAuthenticationProcessingFilter. Фильтр обрабатывает все запросы, поступающие на REST. Если в запросе нет токена, то
attemptAuthentication возвращает
SecurityContextHolder.getContext().getAuthentication();
Если быть точным, то
AnonymousAuthenticationToken
Как нужно настроить HttpSecurity, чтобы доступ ко всем методам REST был у всех пользователей? Кроме методов, помеченных @Secured
Реализация attemptAuthentication в моем фильтре:
@Override
public Authentication attemptAuthentication(HttpServletRequest request,
HttpServletResponse response)
throws AuthenticationException, IOException, ServletException {
String token = request.getHeader(HEADER_TOKEN);
if (token == null) {
return SecurityContextHolder.getContext().getAuthentication();
}
TokenAuthentication authentication = new TokenAuthentication(token);
return getAuthenticationManager().authenticate(authentication);
}
Текущая настройка, которая не работает:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest()
.permitAll()
.and()
.httpBasic()
.authenticationEntryPoint(entryPoint);
}