博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shiro 自定义过滤器,拦截过期session的请求,并且以ajax形式返回
阅读量:6760 次
发布时间:2019-06-26

本文共 2651 字,大约阅读时间需要 8 分钟。

自定义过滤器:

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

 

转载于:https://www.cnblogs.com/leechenxiang/p/7070229.html

你可能感兴趣的文章
oracle教程之oracle 删除表空间
查看>>
我的友情链接
查看>>
python 2.7.10 找不到 libmysqlclient.18.dylib 解决方案
查看>>
Exchange server 2010 安装部署之二,Exchange2010安装详解
查看>>
负载均衡集群之LVS
查看>>
本地计算机无法启动Server服务
查看>>
Compellent SAN存储解决方案
查看>>
优秀前端工程师需要做的10件事
查看>>
Python——异常(内置异常以及应用场景)
查看>>
IT运维服务 - 数据库监控和日常维护项目
查看>>
在java-Hibernate关系映射之关联映射知识描述
查看>>
java整理知识点
查看>>
软件开发人员想找的工作,随便聊聊,娱乐大家,请补充补充
查看>>
DAY08 NETWORK CISCO简单通信
查看>>
jQuery学习小结3——AJAX
查看>>
MYSQL 字符集问题
查看>>
我的友情链接
查看>>
Android学习笔记-基于HTTP的通信技术
查看>>
saltstack 使用总结
查看>>
我的友情链接
查看>>