java – Spring安全性在尝试注销时返回302
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring安全性在尝试注销时返回302,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2324字,纯文字阅读大概需要4分钟。
内容图文
我使用Spring安全性(4.0.2.RELEASE)来保护我的应用程序.
我可以正常登录并且我的身份验证的URL受到保护,但是当我尝试注销时,我会不断获得302 POST响应,然后重定向到我配置的failureUrl(“/ cms / login?error”).
这是我的WebSecurityConfig类
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(HttpSecurity http) throws Exception
{
http
.authorizeRequests()
.antMatchers("/*").permitAll()
.antMatchers("/cms/*").authenticated()
.antMatchers("/cms/*/*").authenticated()
.antMatchers("/cms/*/*/*").authenticated().and()
.formLogin()
.loginPage("/cms/login")
.defaultSuccessUrl("/cms/login?success")
.failureUrl("/cms/login?error")
.permitAll().and()
.logout()
.logoutUrl("/cms/login?logout")
.logoutSuccessUrl("/cms/login")
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception
{
auth.inMemoryAuthentication()
.withUser("u")
.password("p")
.roles("USER");
}
@Bean
public PasswordEncoder passwordEncoder()
{
return new BCryptPasswordEncoder();
}
}
这是我的登录控制器:
@Slf4j
@Controller
@RequestMapping(value = {"/cms", "/cms/login"})
public class CmsLoginController extends CmsBaseController
{
@RequestMapping
public ModelAndView handleLogin(HttpServletResponse request,
Model model,
@RequestParam(value = LOGIN_SUCCESS, required = false) String success,
@RequestParam(value = LOGIN_ERROR, required = false) String error,
@RequestParam(value = LOGOUT, required = false) String logout)
{
try
{
if (success != null)
{
setLoggedIn(true);
request.sendRedirect(XXXXX);
}
if (error != null)
{
model.addAttribute(LOGIN_ERROR, "Invalid username and password!");
}
if (logout != null)
{
model.addAttribute(LOGOUT, "You've been logged out successfully.");
setLoggedIn(false);
}
return new ModelAndView(CMS_CONTEXT + LOGIN_URL);
}
catch(Exception e)
{
setLoggedIn(false);
log.error(e.toString(), e);
return new ModelAndView(ERROR_VIEW_NAME);
}
}
}
为了记录,我最初得到的注销功能正常,但我必须介绍一些不幸的破坏它的变化……
有什么想法吗?
谢谢
解决方法:
我认为问题是CSRF过滤器.在Spring Security 4中,默认情况下启用CSRF预防,每个POST请求都需要CSRF令牌.
如果您从以前的Spring版本迁移了代码,则很有可能出现问题.
要快速测试,请在配置中添加http.csrf().disable.如果它以这种方式工作,那么转回CSRF保护并以某种方式将CSRF令牌添加到POST注销请求中.
内容总结
以上是互联网集市为您收集整理的java – Spring安全性在尝试注销时返回302全部内容,希望文章能够帮你解决java – Spring安全性在尝试注销时返回302所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。