SpringSecurity5-教程2-登出源码分析

使用demo学习,其实在之前教程中,在FilterChainProxy中看到过LogoutFilter,这个就是默认的登出Filter;

源码分析

首先浏览器访问http://localhost:8035/,输入用户名root和密码root完成登录;然后在FilterChainProxy打断点如下:

然后浏览器访问http://localhost:8035/logout ,进入断点:

可看到LogoutFilter,放开断点,直到进入LogoutFilter:

进入requiresLogout方法:

可以看到只要是/logout请求,均判断为登出请求;debug放行到执行登出方法,进入logout方法:

可以看到有两个handler,分别是SecurityContextLogoutHandler和LogoutSuccessEventPublishingLogoutHandler,

进入SecurityContextLogoutHandler:

LogoutSuccessEventPublishingLogoutHandler就是发送一个登出成功的事件,供用户自定义订阅方法;

debug放行进入onLogoutSuccess方法:

可知默认重定向到/login?logout

debug放行,可知执行return方法,不会后续的Filter:

取消所有断点,页面渲染:

经验总结

总结可知,登出最重要的就是session置为无效并清理认证结果,即SecurityContextLogoutHandler,如果想自定义登出接口,可以实现为:

Java
@RequestMapping(value = "/myLogout")
public void logout(HttpServletRequest request, HttpServletResponse response, String redirect_uri) throws IOException {
    new SecurityContextLogoutHandler().logout(request, null, null);
    if (redirect_uri.isEmpty()) {
        response.sendRedirect("/");
        return;
    }
    response.sendRedirect(redirect_uri);
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!以下是一个简单的Spring Security OAuth2教程: 1. 首先,确保你的项目中已经添加了Spring Security和OAuth2的依赖。 2. 创建一个配置类,用于配置Spring Security和OAuth2。可以参考以下示例: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/oauth/**").permitAll() .anyRequest().authenticated() .and() .csrf().disable(); } } ``` 这个配置类启用了Spring Security,并配置了允许访问`/oauth/**`路径的所有请求,其他请求需要进行身份验证。 3. 创建一个OAuth2授权服务器配置类,用于配置OAuth2服务器。可以参考以下示例: ```java @Configuration @EnableAuthorizationServer public class OAuth2Config extends AuthorizationServerConfigurerAdapter { @Autowired private AuthenticationManager authenticationManager; @Override public void configure(AuthorizationServerSecurityConfigurer security) throws Exception { security.checkTokenAccess("isAuthenticated()"); } @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() .withClient("client_id") .secret("client_secret") .authorizedGrantTypes("authorization_code", "refresh_token") .scopes("read", "write") .redirectUris("http://localhost:8080/callback"); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.authenticationManager(authenticationManager); } } ``` 这个配置类启用了授权服务器,并配置了一个内存中的客户端,使用授权码和刷新令牌来授予读写权限。可以根据需要进行修改。 4. 创建一个资服务器配置类,用于配置OAuth2资服务器。可以参考以下示例: ```java @Configuration @EnableResourceServer public class ResourceServerConfig extends ResourceServerConfigurerAdapter { @Override public void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/api/**").authenticated() .and() .csrf().disable(); } } ``` 这个配置类启用了资服务器,并配置了需要进行身份验证的`/api/**`路径。 5. 创建一个控制器类,用于测试保护的API。可以参考以下示例: ```java @RestController @RequestMapping("/api") public class ApiController { @GetMapping("/hello") public String hello() { return "Hello, OAuth2!"; } } ``` 这个控制器类定义了一个简单的API接口,需要进行身份验证才能访问。 以上是一个简单的Spring Security OAuth2教程,希望对你有帮助!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值