我正在使用Spring Web,Spring Security和Spring社交创建一个Spring启动应用程序。该应用程序包含使用基本身份验证进行安全性的休息服我试图配置Spring以使应用程序无状态,但是当我使用浏览器向Web服务发出请求时,浏览器会提示输入用户凭据,但由于会话创建,所有先前的请求都使用相同的用户凭据。我已经配置了应用程序来阻止这种情况发生但仍有问题。\
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");
}
}
我应该更改或添加什么才能获得此功能。
答案 0 :(得分:1)
看看这个:
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll() //allow CORS option calls
.antMatchers("/resources/**").permitAll()
.anyRequest().authenticated()
.and()
.httpBasic();
答案 1 :(得分:0)
Spring安全性基于称为SecurityContext的东西。这是一个ThreadLocal,例如一次仅在一个线程上存在。每个请求都将在其自己的线程上,并且除非将SecurityContext设置为包含适当的角色,否则将无法访问任何受保护的资源。因此,即使您刚刚登录(幕后将角色插入到SecurityContext中),该安全上下文也消失了,就好像它是另一个用户一样。令牌是您要如何处理此问题。或者base64将您的用户名和密码编码到每个请求中,无论您的船身是什么。