开发者社区> 风间影月> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

shiro 自定义过滤器,拦截过期session的请求,并且以ajax形式返回

简介: 自定义过滤器: public class CustomFormAuthenticationFilter extends FormAuthenticationFilter { @Override protected boolean onAccessDenied(ServletReq...
+关注继续查看

自定义过滤器:

public class CustomFormAuthenticationFilter extends FormAuthenticationFilter {

    @Override
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
        if (isLoginRequest(request, response)) {
            if (isLoginSubmission(request, response)) {
                return executeLogin(request, response);
            } else {
                // 放行 allow them to see the login page ;)
                return true;
            }
        } else {
            HttpServletRequest httpRequest = WebUtils.toHttp(request);
            
            if (ShiroFilterUtils.isAjax(httpRequest)) {
                
                HttpServletResponse httpServletResponse = WebUtils.toHttp(response);  
                httpServletResponse.sendError(ShiroFilterUtils.HTTP_STATUS_SESSION_EXPIRE);
                 
                return false;
    
            } else {  
                saveRequestAndRedirectToLogin(request, response); 
            }  

            return false;
        }
    }
    
    /**
     * 判断ajax请求
     * @param request
     * @return
     */
    boolean isAjax(HttpServletRequest request){
        return  (request.getHeader("X-Requested-With") != null  && "XMLHttpRequest".equals( request.getHeader("X-Requested-With").toString())   ) ;
    }
    
}

封装ajax

var Error = function () {
    
    return {
        // 初始化各个函数及对象
        init: function () {

        },
        
        // 显示或者记录错误
        displayError: function(response, ajaxOptions, thrownError) {
            if (response.status == 404) {// 页面没有找到
                pageContent.load($("#hdnContextPath").val() + "/page/404.action");
            } else if (response.status == 401) {// session过期
                SweetAlert.errorSessionExpire();
            } else if (response.status == 507) {// 用户访问次数太频繁 
                SweetAlert.error("您的访问次数太频繁, 请过一会再试...");
            } else {//其他错误
                window.location = $("#hdnContextPath").val() + "/page/500.action";  
            }
            console.log(thrownError);
        }

    };

}();

jQuery(document).ready(function() {
    Error.init();
});

JS的引用处如下:

App.blockUI();
    
    $.ajax({
        url: $("#hdnContextPath").val() + "/feedback/queryFeedBackDetail.action",
        type: "POST",
        async: false,
        data: {"feedbackId": feedbackId, "userId": userId, "status": status},
        success: function(data) {
            // 忽略
        },
        error: function (response, ajaxOptions, thrownError) {
            App.unblockUI();
            Error.displayError(response, ajaxOptions, thrownError);                
        }
    });

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
新来的妹纸问我 AJAX 请求为什么不安全?我没有回答出来。。。
开篇三问 AJAX请求真的不安全么? AJAX请求哪里不安全?
86 0
AJAX 请求真的不安全么?
开篇三问 AJAX请求真的不安全么? AJAX请求哪里不安全? 怎么样让AJAX请求更安全?
71 0
基于SSM+Jquery+ajax实现批量删除功能
基于SSM+Jquery+ajax实现批量删除功能
131 0
jQuery Ajax 简单的实现跨域请求
jQuery Ajax 简单的实现跨域请求
127 0
JQuery Ajax 请求格式
JQuery Ajax 请求格式
59 0
+关注
风间影月
互联网后端开发工程师,技术经理,项目经理,架构师
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载