Spring Security 使用非spring默认的登陆页面,是如何跳转到登陆成功页面的?
SpringSecurity使用非spring默认的登陆页面,是如何跳转到登陆成功页面的?表单如下<formaction="j_spring_security_check...
Spring Security 使用非spring默认的登陆页面,是如何跳转到登陆成功页面的?
表单如下<form action="j_spring_security_check" method="post"> 展开
表单如下<form action="j_spring_security_check" method="post"> 展开
4个回答
展开全部
发现这个问题已经在这放了那么久没人回答,为了方便后面的人,我在这里就完结一下这个问题。
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这里我就不多说了。
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这里我就不多说了。
展开全部
我来回答这个问题吧,很多人都是复制粘贴的,贼烦!!!
<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);
}
}
}
<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);
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好像没遇到过这 个问题。 Spring Security 好像又一个配置文件可配置。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询