Как в Security Context сообщить что пользователь анонимный?
Есть настраиваемый Spring Security 6.2. :
@EnableWebSecurity
@Configuration
public class SecurityConfig {
private final JwtAuthenticationFilter jwtAuthenticationFilter;
@Autowired
public SecurityConfig(JwtAuthenticationFilter jwtAuthenticationFilter) {
this.jwtAuthenticationFilter = jwtAuthenticationFilter;
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/anonymous").anonymous()
)
.addFilterBefore(jwtAuthenticationFilter, AuthorizationFilter.class)
.build();
}
}
Как видно из кода, если дернуть за ручку /api/anonymous - то доступ должны получить только анонимные пользователи. Так же есть свой кастомный фильтр, который осуществляет проверка и валидацию JWT токена. Как в этом фильтре я могу сообщить Security Context что пользователь анонимный?
@Override
protected void doFilterInternal(
HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain
) throws ServletException, IOException {
final String authorization = request.getHeader(HttpHeaders.AUTHORIZATION);
if (authorization == null || !authorization.startsWith("Bearer ")) {
// Сообщить в Security Context что пользователь анонимный
filterChain.doFilter(request, response);
return;
}
// Валидация токена ..
}
Есть особые причины использовать anonymous(), а не permitAll().
Всем заранее спасибо за помощь