无状态应用程序Spring Security

时间:2015-08-03 22:08:53

标签: java spring spring-security spring-boot

我正在使用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");
    }
}

我应该更改或添加什么才能获得此功能。

2 个答案:

答案 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将您的用户名和密码编码到每个请求中,无论您的船身是什么。