java – Spring安全“forward:”指令无法转发到登录表单

前端之家收集整理的这篇文章主要介绍了java – Spring安全“forward:”指令无法转发到登录表单前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
用户创建帐户后,我想自动登录用户.

我的标准表单登录Springs过滤器在/ postlogin处理.如果我去http:// localhost / postlogin它试图登录我(失败,因为我没有包括post参数),但做出正确的尝试.

但是如果我想以编程方式登录用户,并尝试从控制器返回:“forward:/ postlogin”我得到一个404.

我假设forward:指令不通过过滤器,因此不能被UsernamePasswordAuthenticationFilter处理.

如何手动引导登录程序?我想在用户创建一个新帐号之后(他们应该在注册完成后立即登录到该帐户).

解决方法

我错读了另一条指导,意识到正确的处理方法如下:

1)在SecurityContextHolder上手动设置认证令牌

UsernamePasswordWithAttributesAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken( loadUserByUsername(username),password,authorities );
    SecurityContextHolder.getContext().setAuthentication(authenticationToken);

2)此时不要呈现页面或使用forward:指令.您必须使用redirect:directive.

return "redirect:/accountcreated";

如果您呈现页面,页面将加载正常,但会话对象将丢失,因为将创建一个新的j_session_id,但不会使其到浏览器中间请求,下一个请求将使用旧的j_session_id,丢失新的会话对象& authetication.

使用forward:指令将绕过认证过滤器,没有好的.

重定向:导致更新的会话信息使其到浏览器.

猜你在找的Java相关文章