Я пытаюсь защитить свое приложение с помощью Spring Security oAuth2. Есть ли способ вернуть 401 для некоторого URL-адреса, в то время как другие страницы переходят на страницу входа, если пользователь не вошел в систему.
Например, вернуть форму входа для /ui/* и вернуть 401 для /api/*.
Я пытался использовать два SecurityWebFilterChain, но безуспешно.





Вы можете настроить Spring Security для использования пользовательского AuthenticationEntryPoint, например:
http
// ... your configuration
.exceptionHandling((ex) -> ex
.defaultAuthenticationEntryPointFor(new LoginUrlAuthenticationEntryPoint("/login"), new AntPathRequestMatcher("/ui/**"))
.defaultAuthenticationEntryPointFor(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED), new AntPathRequestMatcher("/api/**"))
);
Таким образом, Spring Security подберет AuthenticationEntryPoint на основе метода RequestMatcher#matches.
Извините, я не заметил, что вы использовали реактивные биты. В любом случае, я рад, что ты смог это сделать.
Моя весенняя версия безопасности отличается, и коды выглядят примерно так:
http.exceptionHandling().authenticationEntryPoint(new DelegatingServerAuthenticationEntryPoint(
new DelegatingServerAuthenticationEntryPoint.DelegateEntry(
ServerWebExchangeMatchers.pathMatchers("/ui/**"),
new RedirectServerAuthenticationEntryPoint("/login")
),
new DelegatingServerAuthenticationEntryPoint.DelegateEntry(
ServerWebExchangeMatchers.pathMatchers("/api/**"),
new HttpStatusServerEntryPoint(HttpStatus.UNAUTHORIZED)
))
);
Спасибо. Моя версия весенней безопасности несколько отличается, и коды выглядят примерно так: