登录过期时,拦截器拦截到ajax请求无法跳转到登录页面处理方案

一.  后台拦截器处理

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {


        //session拦截
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8")


            Object  user = request.getSession().getAttribute("user");
            if(user != null) {  
                return true;  
            }else{
                // 未登录
                if (INDEX_PATH.equals(requestUrl)||INDEX_PATH_DEFAULT.equals(requestUrl)) {
                    response.sendRedirect(request.getContextPath() + "/login");
                } else {
                    if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){ 
                        //如果是ajax请求响应头会有x-requested-with,自定义707状态码为ajax登录过期
                        response.setStatus(707);
                        PrintWriter out = response.getWriter();  
                        out.print(request.getContextPath() + "/overtime");
                        out.flush();
                    }else {
                        response.sendRedirect(request.getContextPath() + "/overtime");
                    }
                return false;

                }

}

二.  使用 jQuery.ajaxSetup() 方法设置全局 AJAX请求response状态码为自定义的707时,执行以下方法,不执行原本的success function()   。

在个页面都引用的jQuery.js末端加以下代码
jQuery.ajaxSetup({
    statusCode:{
            707:function(data){
                window.parent.location.href=data.responseText;
            }
        }
    })


        

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值