Spring,无法在Java配置

时间:2015-08-27 14:59:52

标签: spring spring-security

我想在Spring-Boot上禁用会话固定保护(使用版本1.2.4)。我们正在用Java配置httpSecurity:

SecurityConfig.Scala

  override def configure(http: HttpSecurity): Unit = {
    println("loading config")
    http.
      csrf().disable().
      authorizeRequests().
      antMatchers("/api/member/**").permitAll().
      antMatchers("/api/feedback/submit").permitAll().
      antMatchers("/test/**").permitAll().
      antMatchers("/session").access("hasRole('ROLE_ADMIN')").
        anyRequest().anonymous().and().
      securityContext().securityContextRepository(memcachedSecurityContextRepository).and().
      formLogin().
        loginPage("/login").failureUrl("/denied").defaultSuccessUrl("/session").and().
      logout().invalidateHttpSession(true).logoutSuccessUrl("/login").and().
      sessionManagement().invalidSessionUrl("/login").maximumSessions(1).expiredUrl("/login").and().
      sessionFixation().none()
  }
}

以下是执行上述代码时Spring的一些Debug:

  

loading config

     

为Ant添加Web访问控制表达式'permitAll'   [图案= '/ API /构件/ **']

     

为Ant添加Web访问控制表达式'permitAll'   [图案= '/ API /反馈/提交']

     

为Ant添加Web访问控制表达式'permitAll'   [图案= '/测试/ **']

     

为Ant添加Web访问控制表达式'hasRole('ROLE_ADMIN')'   [图案= '/会话']

     

添加Web访问控制表达式'anonymous',for   org.springframework.security.web.util.matcher.AnyRequestMatcher@1   验证的配置属性

     

验证的配置属性

这里是身份验证时的调试输出:

  

COOKIEVAL:一些(mh3dg7l715nhvtfdfpng11ooa7)

     

/ api / member / account在第3位(共12位)附加过滤链中;   触发过滤器:'HeaderWriterFilter'

     

不注入HSTS标头,因为它与requestMatcher不匹配   org.springframework.security.web.header.writers.HstsHeaderWriter$SecureRequestMatcher@4e2ca7d9

     

/ api / member / account在第4位的12位额外过滤链中;   触发过滤器:'LogoutFilter'

     

检查请求的匹配:'/ api / member / account';反对'/ logout'

     

/ api / member / account在第5位的12位额外过滤链中;   触发过滤器:'UsernamePasswordAuthenticationFilter'

     

检查请求的匹配:'/ api / member / account';反对'/ login'

     

/ api / member / account在第6位的12位额外过滤链中;   触发过滤器:'ConcurrentSessionFilter'

     

/ api / member / account在第7位的12位额外过滤链中;   触发过滤器:'RequestCacheAwareFilter'

     

/ api / member / account在第8位的12位额外过滤链中;   触发过滤器:'SecurityContextHolderAwareRequestFilter'

     

/ api / member / account在第9位的12位额外过滤链中;   触发过滤器:'AnonymousAuthenticationFilter'

     

SecurityContextHolder没有填充匿名令牌,因为它   已包含:   “org.springframework.security.authentication.UsernamePasswordAuthenticationToken@4525caad:   负责人:org.springframework.security.core.userdetails.User@586034f:   用户名:admin;密码保护];启用:true;   AccountNonExpired:true; credentialsNonExpired:true;   AccountNonLocked:true;授权机构:ROLE_ADMIN;证书:   [保护状态];认证:真实;细节:null;授权机构:   ROLE_ADMIN'

     

/ api / member / account在第10位的12位额外过滤链中;   触发过滤器:'SessionManagementFilter'

     

/ api / member / account在第11位的12位额外过滤链中;   触发过滤器:'ExceptionTranslationFilter'

     

/ api / member / account在12位12的附加过滤链中;   触发过滤器:'FilterSecurityInterceptor'

     

检查请求的匹配:'/ api / member / account';反对   '/ API /构件/ **'

     

安全对象:FilterInvocation:URL:/ api / member / account;属性:   [permitAll]

     

以前经过身份验证:   org.springframework.security.authentication.UsernamePasswordAuthenticationToken@4525caad:   负责人:org.springframework.security.core.userdetails.User@586034f:   用户名:admin;密码保护];启用:true;   AccountNonExpired:true; credentialsNonExpired:true;   AccountNonLocked:true;授权机构:ROLE_ADMIN;证书:   [保护状态];认证:真实;细节:null;授权机构:   ROLE_ADMIN

     

选民:   org.springframework.security.web.access.expression.WebExpressionVoter@28549e18,   返回:1

     

授权成功

     

RunAsManager未更改身份验证对象

     

/ api / member / account到达额外过滤器链的末尾;诉讼   与原始链

我需要做些什么来防止身份验证后更改cookie值?我以为调用sessionFixation()。none()会转为session-fixation-protection。

1 个答案:

答案 0 :(得分:0)

就我而言,这有助于:

http
  .sessionManagement()
    .sessionAuthenticationStrategy(new NullAuthenticatedSessionStrategy()).and()
  ....

NullAuthenticatedSessionStrategy将不会对身份验证做任何事情。

  

这样做是不安全的!   这仅用于测试目的!