На 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);
}