如何配置Spring Security拦截未认证用户访问指定LOGOUT_URL
问题原因
Spring Security 过滤器链中,LogoutFilter 的执行优先级高于授权校验过滤器,你在 authorizeRequests 中配置的权限规则还未触发,注销请求就已经被 LogoutFilter 处理完毕,因此现有配置不会对注销地址生效,和是否是@RestController端点无关。
解决方案
直接调整注销配置的默认放行规则即可,修改后的代码如下:
protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .authorizeRequests() .anyRequest().permitAll() .and() .logout() .logoutUrl(LOGOUT_URL) // 关闭注销地址的默认全量放行权限 .permitAll(false) .invalidateHttpSession(true) .logoutSuccessHandler(logoutSuccessHandler); }
配置完成后,只有已认证的用户可以正常调用注销接口,未认证用户访问该地址会直接返回403拒绝响应,完全符合需求。
如果需要对注销请求做更自定义的权限校验,也可以在LogoutFilter之前插入自定义过滤器做前置校验:
// customLogoutAuthFilter为自行实现的权限校验过滤器 http.addFilterBefore(customLogoutAuthFilter, LogoutFilter.class);
内容的提问来源于stack exchange,提问作者karim
相关产品推荐
相关产品推荐

