ajax session失效后,跳转到登录页面的全局处理

在SaaS系统中, 我们需要考虑, 用户停留页面时间过长导致session失效后, ajax方法无法正确运行, 我们又不希望在每个ajax方法中, 来判断是否登录, 未登录的情况下就跳转到登录页.


我们的解决方案是:

首先,有一个Intercepter 实现了HandlerInterceptor接口.

在preHandler方法中, 判断handler对象类型, 我们只处理 spring controller方法.

if (handler instanceof HandlerMethod) {
            // intercept
            Account account = (Account) session.getAttribute("account");
            if (account == null) {
                HandlerMethod handlerMethod = (HandlerMethod) handler;
                // 根据请求的是否是ajax方法, 来判断是直接302还是返回一个JSON
                if (handlerMethod.hasMethodAnnotation(ResponseBody.class)) { // ajax方法
                    PrintWriter printWriter = response.getWriter();
                    response.setStatus(499);
                    String url = request.getHeader("referer");
                    if (org.springframework.util.StringUtils.isEmpty(url)) {
                        url = loginPath;
                    }
                    printWriter.print(url);
                } else {
                    String redirectUrl = loginPath;
                    session.setAttribute("retUrl",  request.getRequestURL().toString());
                    response.sendRedirect(redirectUrl);
                }
                return false;
            } else {
                List<Role> roleList = (List<Role>) session.getAttribute("roles");
                SessionHolder.setAccount(account);
                SessionHolder.setRoles(roleList);
                return true;
            }
        }


在前端页面加入:

$.ajaxSetup({
        statusCode: {
            499: function (data) {
                window.location.href = data.responseText;
            }
        }
    });



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值