Java 春季启动应用程序。SecurityContextHolder与HttpSession之争
在Web应用程序中。在会话中存储用户详细信息是很常见的,但是如果在Spring Boot中,您按照以下方式配置您的Java 春季启动应用程序。SecurityContextHolder与HttpSession之争,java,spring-mvc,jakarta-ee,spring-boot,java-ee-7,Java,Spring Mvc,Jakarta Ee,Spring Boot,Java Ee 7,在Web应用程序中。在会话中存储用户详细信息是很常见的,但是如果在Spring Boot中,您按照以下方式配置您的SecurityConfig类: @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(Authentic
SecurityConfig
类:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.userDetailsService(userSecurityService)
.passwordEncoder(passwordEncoder());
}
...
}
及
及
然后,您可以使用always从已登录用户获取所有信息
User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal()
所以。。在
HttpSession
中存储用户信息是一种不好的做法,旧做法还是我错过了什么?Spring Security是一种安全框架,可以在web和独立应用程序中使用。SecurityContextHolder
提供了一种统一的方式来获取SecurityContext
以及最终的用户
在web应用程序中使用Spring Security时,SecurityContext
的存储被委托给SecurityContextRepository
,使用的默认实现是HttpSessionSecurityContextRepository
,因此最后它仍然将其存储在HttpSession
中,但您也可以创建拥有实现并将其存储在其他位置(数据库、Redis等)
简言之,SecurityContextHolder
是一种统一的方式,可以获取Spring Security使用的SecurityContext
,而无需知道它在所有位置的存储方式
public class User implements Serializable, UserDetails {
..
}
User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal()