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

2024-11-24 20:43:43
推荐回答(4个)
回答1:

发现这个问题已经在这放了那么久没人回答,为了方便后面的人,我在这里就完结一下这个问题。
Spring Security 默认action="j_spring_security_check",让很多人不理解这个请求之后会跳转到哪里去,
这里我们就看
配置文件里这个标签,这个标签里面最基本的是intercept-url,用来设置访问权限的。
标签里面有个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这个标签下配置



这样我们就可以在登录成功后调用上面对应的action,关于action返回视图,SpringMVC和Struts2这里我就不多说了。

回答2:

我来回答这个问题吧,很多人都是复制粘贴的,贼烦!!!

首先这个表单是真正的向springsecurity提交登陆认证,把用户名和密码,传给springsecurity认证。
我们需要在spring security的配置文件里配置登陆成功的控制类,比如我这里配置的是


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 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);
}
}
}

回答3:

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

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

回答4:

好像没遇到过这 个问题。 Spring Security 好像又一个配置文件可配置。