ssm框架+前端ajax登录,解决登录后跳转回原链接问题

当前环境:

      spring做全链接拦截,在拦截器中进行登录验证,登录方法在前端触发使用的是ajax,登录方式调用成功后,将在session中保存登录的UUID,登录成功后的处理直接使用页面跳转到主页(window.location.href)。

出现的变更:

      如果页面长时间没有访问,session失效后,之前打开的页面上的任何业务操作都将会跳转到登录页面,登录后会跳转到主页。

      在重新登录后客户希望回到原来的页面。

处理方案:

     1、在拦截器中,当登录的uuid为空的时候,记录下访问的全路径保存到session中:

String getFullURL(HttpServletRequest request) {
         StringBuffer url = request.getRequestURL();
         if (request.getQueryString() != null) {
          url.append("?");
          url.append(request.getQueryString());
         }
         return url.toString();
        }


      2、当正常跳转时,清除保存到session中的路径,由于程序逻辑中,在登录成功后会直接在页面上跳转,故而在登录成功后的uuid不为空时,保存的全路径已经被使用了。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。首先,我需要了解你所使用的环境和工具版本,这将有助于我更好地为你提供解答。以下是一般的做法: 1.配置拦截器 在 Spring MVC 中,可以通过实现 HandlerInterceptor 接口来创建一个拦截器。在拦截器中,我们可以对请求进行预处理或者后处理,以及记录日志等操作。 具体步骤如下: - 创建一个拦截器类,实现 HandlerInterceptor 接口,并实现 preHandle()、postHandle() 和 afterCompletion() 方法。 - 在 Spring MVC 配置文件中配置拦截器。可以使用 <mvc:interceptors> 标签或者在 Java 配置类中使用 addInterceptors() 方法。 以下是一个简单的拦截器示例: ```java public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); if (session.getAttribute("user") == null) { response.sendRedirect(request.getContextPath() + "/login.jsp"); return false; } return true; } // 省略 postHandle 和 afterCompletion 方法 } ``` 2.编写登录页面 在登录页面中,我们需要提供用户名和密码的输入框,以及一个提交按钮。当用户点击提交按钮时,我们需要使用 Ajax 技术将用户名和密码发送给服务器进行验证。如果验证通过,我们可以跳转到主页;否则,我们需要提示用户输入有误。 以下是一个简单的登录页面示例: ```html <!DOCTYPE html> <html> <head> <title>Login</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <script> $(function () { $("#loginBtn").on("click", function () { var username = $("#username").val(); var password = $("#password").val(); $.ajax({ url: "login", type: "post", data: { username: username, password: password }, success: function (data) { if (data === "success") { window.location.href = "home.jsp"; } else { alert("Invalid username or password"); } } }); }); }); </script> </head> <body> <form> <label>Username:</label> <input type="text" id="username"><br><br> <label>Password:</label> <input type="password" id="password"><br><br> <button type="button" id="loginBtn">Login</button> </form> </body> </html> ``` 3.编写后端代码 在后端代码中,我们需要编写一个登录接口,用于接收前端发送的用户名和密码,并进行验证。如果验证通过,我们可以将用户信息存储到 Session 中,并返回 "success";否则,我们需要返回 "failure"。 以下是一个简单的后端代码示例: ```java @Controller public class LoginController { @RequestMapping(value = "/login", method = RequestMethod.POST) @ResponseBody public String login(HttpServletRequest request, String username, String password) { // 进行用户验证 if ("admin".equals(username) && "admin".equals(password)) { HttpSession session = request.getSession(); session.setAttribute("user", username); return "success"; } else { return "failure"; } } } ``` 4.配置 Spring MVC 最后,我们需要在 Spring MVC 配置文件中配置视图解析器、拦截器等。以下是一个简单的配置文件示例: ```xml <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> <mvc:interceptors> <bean class="com.example.interceptor.LoginInterceptor"/> </mvc:interceptors> ``` 希望这些步骤能够帮助你完成登录验证功能的页面。如果你有任何问题或者需要更多帮助,请随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值