Spring Security 使用非spring默认的登陆页面,是如何跳转到登陆成功页面的?

SpringSecurity使用非spring默认的登陆页面,是如何跳转到登陆成功页面的?表单如下<formaction="j_spring_security_check... Spring Security 使用非spring默认的登陆页面,是如何跳转到登陆成功页面的?
表单如下<form action="j_spring_security_check" method="post">
展开
 我来答
zang328174935
推荐于2017-11-25 · TA获得超过552个赞
知道答主
回答量:56
采纳率:0%
帮助的人:2.5万
展开全部
发现这个问题已经在这放了那么久没人回答,为了方便后面的人,我在这里就完结一下这个问题。
Spring Security 默认action="j_spring_security_check",让很多人不理解这个请求之后会跳转到哪里去,
这里我们就看
配置文件里这个<http></http>标签,这个标签里面最基本的是intercept-url,用来设置访问权限的。
<http></http>标签里面有个form-login 标签,这个标签有很多属性,大概情况如下:
form-login属性详解
1. login-page 自定义登录页url,默认为/login
2. login-processing-url 登录请求拦截的url,也就是form表单提交时指定的action
3. default-target-url 默认登录成功后跳转的url
4. always-use-default-target 是否总是使用默认的登录成功后跳转url
5. authentication-failure-url 登录失败后跳转的url
6. username-parameter 用户名的请求字段 默认为userName
7. password-parameter 密码的请求字段 默认为password
8. authentication-success-handler-ref 指向一个AuthenticationSuccessHandler用于处理认证成功的请求,不能和default-target-url还有always-use-default-target同时使用
9. authentication-success-forward-url 用于authentication-failure-handler-ref
10. authentication-failure-handler-ref 指向一个AuthenticationFailureHandler用于处理失败的认证请求
11. authentication-failure-forward-url 用于authentication-failure-handler-ref
12. authentication-details-source-ref 指向一个AuthenticationDetailsSource,在认证过滤器中使用
看到第三条属性没?default-target-url这个属性。
在这里我们假设 你登录成功需要调用一个名字叫toMain.do的action处理一些登录后的逻辑,比如SpringMVC或者Struts2,那么你就可以在http这个标签下配置
<http auto-config="true">
<form-login default-target-url="/toMain.do" />
</http>
这样我们就可以在登录成功后调用上面对应的action,关于action返回视图,SpringMVC和Struts2这里我就不多说了。
百度网友dd1ff13
2018-12-02
知道答主
回答量:8
采纳率:0%
帮助的人:2.1万
展开全部
我来回答这个问题吧,很多人都是复制粘贴的,贼烦!!!

<form action="j_spring_security_check" method="post">首先这个表单是真正的向springsecurity提交登陆认证,把用户名和密码,传给springsecurity认证。
我们需要在spring security的配置文件里配置登陆成功的控制类,比如我这里配置的是
<s:form-login login-page="/system/login" authentication-success-handler-ref="loginLogHandler" />

loginLogHandler是类名LoginLogHandler首字母小写
登陆成功之后会跳转到LoginLogHandler,具体看下面这个类的逻辑处理:在这里用 response.sendRedirect(url)跳转到哪个页面。
@Component
public class LoginLogHandler implements AuthenticationSuccessHandler {

@Autowired
private SystemSetService systemSetService;

public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {

request.getSession().removeAttribute("SPRING_SECURITY_LAST_EXCEPTION");
//保存登陆成功之后的session
OperatorDetails user = (OperatorDetails) SpringSecurityUtils.getCurrentUser();
String userName = user.getUsername();
String password = user.getPassword();
Map<String, String> conditions = new HashMap();
conditions.put("password", password);
conditions.put("username", userName);
UserInfo userInfo = systemSetService.isValidUser(conditions);
request.getSession().setAttribute("user", userInfo);
//实现页面跳转
String interfaceUrl = request.getParameter("spring-security-redirect");
String redirectUrl = "";
if (StringUtils.isNotBlank(interfaceUrl)) {
redirectUrl = request.getContextPath() + interfaceUrl;
response.sendRedirect(redirectUrl);
} else {
String defaultUrl = "/main";
redirectUrl = request.getContextPath()+defaultUrl;
response.sendRedirect(redirectUrl);
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0e4b2ff
2019-04-22
知道答主
回答量:8
采纳率:100%
帮助的人:5354
展开全部

这个其实很简单的,不需要做什么复杂的操作:

我写的是lambda,实现的是AuthenticationEntryPoint接口,你只要写一个该接口的实现类,直接写response.sendRedirect("/login"),这个就是跳到login页的接口url,还可以直接使用另一个方法,直接写登录页地址

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zh_hongguang
2012-03-05
知道答主
回答量:3
采纳率:0%
帮助的人:4847
展开全部
好像没遇到过这 个问题。 Spring Security 好像又一个配置文件可配置。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式