我正在开发一个Springboot 3应用程序。我必须使用Jwt对象,所以我必须沿着spring-boot-starter-security
导入此依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
我有一个自定义的/logout
休息端点。现在有了这个新的依赖项,当我调用我的端点时,它返回一个302
代码并重定向到/login?logout
。
所以我改变了我的配置如下,使它调用自定义休息端点,但它只返回一个302
与重定向URL。
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(request -> request
.requestMatchers("/login*")
.permitAll()
.anyRequest()
.permitAll())
.logout(logout -> logout.logoutSuccessUrl("/cms/logout").permitAll());
http.httpBasic(AbstractHttpConfigurer::disable);
return http.build();
}
我不希望它重定向到另一个URL,我只想调用我的自定义注销休息端点。
我尝试了下面的方法,但它不工作
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(request -> request
.requestMatchers("/login*")
.permitAll()
.anyRequest()
.permitAll())
.logout(logout -> logout.permitAll()
.logoutSuccessHandler(((request, response, authentication) -> new CustomLogoutHandler())));
http.httpBasic(AbstractHttpConfigurer::disable);
return http.build();
}
private class CustomLogoutHandler implements LogoutSuccessHandler{
@Autowired
AuthServiceImpl authService;
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
authService.cmslogout(request,response);
}
}
如果我删除注销,那么这就是我在浏览器中看到的:
如果可以整体禁用这个spring安全注销处理,那就更好了。
我定义了SecurityFilterChain
bean,因为我们已经为这个资源服务器设置了自定义身份验证。访问令牌在cookie中传递以进行自定义身份验证。但是现在,我需要支持Keycloak OIDC。在本例中,我将访问令牌作为Authorization
头的一部分。我对此有特定的过滤器,它拦截请求并决定身份验证流程。
对于keycloak OIDC,我的angular前端应用程序充当client-server
,负责从keylcloak获取访问令牌,并将其添加到对resource-server
的任何API调用中。
使用这个SecurityFilterChain
配置,我允许所有请求,它避免了spring-security'
的默认登录形式。现在我也需要绕过注销重定向。
请帮帮我
1条答案
按热度按时间bfnvny8b1#
如果可以整体禁用这个spring安全注销处理,那就更好了。
只提供任何关于注销的信息(没有处理程序,没有成功处理程序,没有端点,什么都没有)。
登录和注销在OAuth2资源服务器上都没有意义。这是OAuth2客户端关注的问题。请参阅我的教程中的OAuth2基础部分。
另外,请参阅resource server tutorial内部以向未经授权的请求返回正确的
401
(而不是302
* 重定向到登录 *):