我正在使用 Spring Web、Spring Security 和 Spring Social 创建一个 Spring boot 应用程序。该应用程序包含利用基本身份验证来确保安全的其余服务。我正在尝试配置 Spring 以使应用程序无状态,但是当我使用浏览器向 Web 服务发出请求时,浏览器会提示输入用户凭据,但由于 session 创建,所有先前的请求都使用相同的用户凭据。我已经配置了应用程序来阻止这种情况发生,但仍然存在问题。\
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@override
protected void configure(HttpSecurity http) throws Exception{
http.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.csrf().disable()
.authorizeRequests()
.antMatchers("/api/**")
.hasRole("USER")
.andBasic();
}
@override
protected void configure(AuthenticatioinManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("some@gmail.com")
.password("12345")
.role("USER");
}
}
我应该更改或添加什么才能获得此功能。
最佳答案
Spring 安全性基于称为 SecurityContext 的东西。这是一个 ThreadLocal,例如一次仅存在于一个线程上。每个请求都将在其自己的线程上进行,并且无法访问任何 protected 资源,除非将 SecurityContext 设置为包含适当的角色。因此,即使您刚刚登录,在幕后将角色插入到 SecurityContext 中,该安全上下文也会消失,就像它是另一个用户一样。 token 是您想要处理此问题的方式。或者将您的用户名和密码进行 Base64 编码到每个请求中,无论您的情况如何。
关于java - 无状态应用程序 Spring Security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797602/