扫码阅读
手机扫码阅读

【SpringSecurity系列(二十二)】Spring Security 两种资源放行策略,千万别用错了!

47 2024-11-05

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:【SpringSecurity系列(二十二)】Spring Security 两种资源放行策略,千万别用错了!
文章来源:
江南一点雨
扫码关注公众号

摘要

《深入浅出Spring Security》一书由清华大学出版社出版,松哥发布了四套原创视频教程,提供给对Spring Security、Spring Boot+Vue+微人事感兴趣的读者。本文解答了一个常见问题:在Spring Security中如何获取登录用户信息。

1. 两种思路

在Spring Security中,如果需要让某些资源不经登录即可访问,有两种配置策略:一是在configure(WebSecurity web)方法中配置资源放行;二是在configure(HttpSecurity http)方法中配置。第一种方法不经过Spring Security过滤器链,而第二种方法则会。前端静态资源适合第一种方法,而登录接口等必须使用第二种方法,以确保登录请求能够通过Spring Security过滤器链处理。

2. 登录请求分析

用户登录成功后,可以通过SecurityContextHolder.getContext().getAuthentication()或在Controller方法中添加Authentication参数来获取用户信息。登录成功后用户信息存储在SecurityContextHolder,它利用ThreadLocal的特性来保存数据。但由于不同请求可能由不同线程处理,会出现无法获取用户信息的问题。Spring Security通过SecurityContextPersistenceFilter解决这个问题。该过滤器负责在每个请求开始时从session中获取SecurityContext并存入SecurityContextHolder,请求结束时再将其回存。

3. 小结

对于前端静态资源,建议不通过Spring Security过滤器链放行。而后端接口的放行则需要根据场景决定,通常建议走过滤器链,即使用http.authorizeRequests()的方式配置。这样可以确保用户信息能够在登录后存储于session中,便于后续请求获取。

想要了解更多内容?

查看原文:【SpringSecurity系列(二十二)】Spring Security 两种资源放行策略,千万别用错了!
文章来源:
江南一点雨
扫码关注公众号