SpringSecurity的第二次免授权登录

现象

在项目集成springSecurity之后,第一登录之后,用户的请求都是直接访问的,用户的信息在后台都是可以通过SecurityContext获取。

推测

在第一次登录成功之后,会将用户信息存储到session中,用户之后的请求,会通过sessionID查询session,然后通过sessionId获取session对象,然后从session对象中获取SecurityContext数据,然后将数据放入SecurityContextHolder中。后面就可以直接获取到对应的用户数据。

具体实现

第一次登录成功

登录成功之后,在AbstractAuthenticationProcessingFilter中的successfulAuthentication方法。调用SecurityContextHolder.getContext()的setAuthentication方法,会将我们验证成功的那个Authentication放到SecurityContext中,然后再放到SecurityContextHolder中。然后还会调用我们自定义的successHandle。

在请求处理完回来之后,过滤链依次返回,知道退回到第一个过滤器SecurityContextPersisenceFilter中,

finally{
	//1、查询上下文中是否包含认证信息
	//2、有的话,放入session中
	repo.saveContent(...);
}

第二次请求

首先被过滤链的第一个过滤器SecurityContextPersisenceFilter拦截,在代码块中

//1、首先获取session中SecurityContext
SecurityContext contextBeforeChainExecution = repo.loadcontext(...);
//2、将Context放入SecurityHolder中
SecurityHolder.setContext(contextBeforeChainExecution );
//3、继续下一个过滤器
chain.doFilter(...);

通过第一次过滤器,上下文中就会包含用户认证的信息。

参考

DefaultSecurityFilterChain查看所有的Filter器,也会在日志中打印

博客地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝多芬也爱敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值