使用shiro自定义过滤器,拦截ajax请求,可用于动静分离

shiro,不多说了,都知道是权限框架

用过shiro的都知道shiro自己有各种过滤器,只要配置好了就可以自动过滤,自动跳转到对应的页面,比如:认证,授权,退出等,都是通过自身的过滤器,

咱们来看这张图就能大致看到shiro基础过滤器的从属关系

今天我们要说的是session过期,是个最简单的过滤,在普通的MVC后台开发中,只要自己定义一个过滤器,拦截请求,判断session中的登录者是否失效,失效了就自动退出,但是,shiro过滤器基于servlet,当然也是这么做的,但是如今使用ajax的框架很多,比如easyUI,extJS,或者有的公司自己实现全ajax静态分离,遇到这样的情况,shiro拦截到session过期后,是不会页面跳转的,那么这个时候就要重写过滤器了

首先,在spring-shiro.xml中得自定义你的过滤器

然后自定义过滤器需要继承FormAuthenticationFilter.java这个类,并且重写

这个方法,<1>是自己写的判断当前request是否ajax请求,

<2>抛出异常,让前端js接受到response请求认证失败,

<3>是很早以前的写法,只支持ajax load页面形式,但是ajax post类请求是不行的

然后前端catch到这个错误消息

处理一下这个错误就行,这个Error是我自己定义的一个JS类对象,可以看一下十分简单:

好,把session时间微调到10s,失效后进行测试,不论是页面级别请求还是ajax请求,都能够跳转至登录页面,当然了如果你有其他的错误都可以封装到这个类中,并且这个.js可以被任何页面调用。

原文发布于微信公众号 - BeJavaGod(wxleechenxiang)

原文发表时间:2016-11-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LanceToBigData

MongoDB(一)环境搭建与初始配置

前言   最近的项目中需要用到MongoDB,所这段时间需要学习知道怎么去使用这个数据库。   这里我先简单的介绍一下什么是MongoDB,后面还会详细的介绍:...

4915
来自专栏雨过天晴

原 配置SSH访问GIT

1884
来自专栏鸿的学习笔记

日志采集技术笔记

使用Linux的rename机制保证文件写入要么成功,要么失败,绝对不能出现写了一半的情况。

2845
来自专栏转载gongluck的CSDN博客

搭建 FTP 文件服务

安装并启动 FTP 服务 任务时间:5min ~ 10min 安装 VSFTPD 使用 apt-get 安装 vsftpd: sudo apt-get in...

8887
来自专栏吴裕超

github import repository创建github仓库

现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。 首先,登陆GitHub,创建一个新的仓库,名字叫blog 1.先创建一个项目仓库 2...

2896
来自专栏Angular&服务

ionic3 在app首页跳转重定向报错

2252
来自专栏葡萄城控件技术团队

如何在ASP.NET中生成HTML5离线Web应用

传统的Web应用程序有一个很大的症结是当用户的网络连接不好时,应用会加载失败,为了 解决这一问题,HTML5中引入了Web的离线工作的功能。离线功能使得Web应...

2146
来自专栏移动端开发

Android学习--广播机制

        标准广播:  是一种完全异步执行的广播,在广播发出去之后,所有的广播接收器几乎是同一时接收到这条广播。

1035
来自专栏nice_每一天

excel导出使用get请求参数过长问题

excel导出功能时,使用的是window.location.href=url也就是get请求。当传入参数过长的时候就报了414,地址过长的错误。

1372
来自专栏程序小工

【Linux】系统学习Crontab定时任务

crontab 是一个用于设置周期性执行任务的工具。目前服务器端的运行环境大多数为 Linux,在日常的运营和维护中会有很多需要定期执行的操作,其中有些操作是可...

1332

扫码关注云+社区