Spring Security基本框架之登录数据保存

本文内容来自王松老师的《深入浅出Spring Security》,自己在学习的时候为了加深理解顺手抄录的,有时候还会写一些自己的想法。

        如果不使用Spring Security这一类的安全框架,大部分开发者可能将会把登录信息保存在Session中。事实上Spring Security也是这么做的。但是为了方便,Spring Security在此基础上还做了一些改进,其中主要的一个变化就是线程绑定(一提到线程绑定,敏感的小伙伴就应该会想到ThreadLocal)。

        当用户登录成功后,Spring Security会将登录成功的用户信息保存在SecurityContextHolder中。SecurityContextHolder中保存的数据默认是通过ThreadLocal来实现的,使用ThreadLocal创建的变量只能被当前线程访问,不能被其他线程访问和修改,也就是用户数据和当前请求线程绑定在一起。当登录请求处理完毕后,Spring Security会将保存在SecurityContextHolder中的熟路拿出来保存到Session中,同时将SpringContextHolder中的数清空。以后每次请求到来时,Spring Security就会先从Session中取出数据保存到SecurityContextHolder中,方便该请求在后续处理中使用。在请求处理结束时将SecurityContextHolder中的数据拿出来放入Session中,然后清空SecurityContextHolder中的数据。

        这一策略非常方便用户在Controller或者Service层中获取当前登录用的数据,但是带来另外一个问题就是在子线程中如果想要获取当前登录用户的信息就比较麻烦。Spring Security也提供了对应的解决方案,如果开发者使用@Async注解来开启一步任务的话,那么只需要添加如下配置使用Spring Security提供的异步任务代理,就可以在异步任务中的SecurityContextHolder获取当前登录用户的信息了:

@Configuration
public class ApplicationConfiguration extends AsyncConfigurerSupport {
    @Override
    public Executor getAsyncExecutor() {
        return new DelegatingSecurityContextExecutorService(Executors.newFixedThreadPool(5));
    }
}

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security登录成功后会将登录用户的信息保存SecurityContextHolder中。这个信息会通过线程绑定的方式与当前请求线程关联起来,确保只有当前线程可以访问和修改这些用户数据。默认情况下,Spring Security使用ThreadLocal来实现线程绑定,这意味着这些用户数据只能被当前线程访问。 在请求处理结束后,Spring Security会将SecurityContextHolder中的用户数据从中取出并保存到Session中。然后清空SecurityContextHolder中的数据。这样,在后续的请求处理中,Spring Security就可以从Session中取出用户数据,方便使用。这种方式既方便了开发者的使用,又保证了用户数据的安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringSecurity登录用户数据获取](https://blog.csdn.net/z318913/article/details/125741276)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Spring Security基本框架登录数据保存](https://blog.csdn.net/qq_27062249/article/details/127826362)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值