我想在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。
答案 0 :(得分:0)
就我而言,这有助于:
http
.sessionManagement()
.sessionAuthenticationStrategy(new NullAuthenticatedSessionStrategy()).and()
....
NullAuthenticatedSessionStrategy将不会对身份验证做任何事情。
这样做是不安全的! 这仅用于测试目的!