Задать вопрос

Spring Security: Как разрешить доступ неавторизованным клиентам?

На 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);
    }
  • Вопрос задан
  • 3089 просмотров
Подписаться 1 Оценить Комментировать
Решение пользователя Кирилл Баталин К ответам на вопрос (2)
@kir55rus Автор вопроса
Проблему решил, установив флаг фильтра continueChainBeforeSuccessfulAuthentication = true
Ответ написан
Комментировать