spring security 4 的logout问题
今天在集成spring-boot 和 spring-security的时候,出现了如下的怪象:
配置好了基本的登录和身份验证(自定义了一个简单的UserDetailsService),springboot的配置如下:
http.authorizeRequests().anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/signin").permitAll()
.failureUrl("/signin?error=1").permitAll()
.defaultSuccessUrl("/index")
.loginProcessingUrl("/login")
.and()
.logout().logoutRequestMatcher(AntPathRequestMatcher("/logout", "POST"))
.deleteCookies("JSESSIONID")
.invalidateHttpSession(true)
.and()
.httpBasic();
首次登录没有问题,即:登录后直接进入了Java-Based配置好的index页面。然后点击执行退出,因为启用了CSRF策略,所有登出分为”signout -> logout”两步。登出也OK了。但是,此时再次登录,页面没有进入index,而是停留在登录页面。仔细观察URL,发现浏览器地址栏的URL变成了http://localhost:8080/signin?logout
。经过调查,发现是LogoutSuccessHandler出了问题。