【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中,便于后续请求获取。
想要了解更多内容?