首页 >> 大全

拦截器的使用(一)

2023-11-27 大全 38 作者:考证青年

(一) 中的 拦截器在实际开发中经常遇到。比如做权限登陆,页面跳转流程控制,日志打印,特殊流程的处理等我们都可以使用拦截来进行操作。

(二)拦截器的实现

中的 拦截请求是通过来实现的。在 中定义一个 非常简单,主要有两种方式,

第一种方式是要定义的类要实现了 的接口,或者是这个类继承实现了 接口的类,比如 已经提供的实现了 接口的抽象类apter ;

第二种方式是实现的r接口,或者是继承实现了r的类。

通常,我们使用第一种继承apter类来实现拦截器的使用

在接口中有三个方法,大家要深入理解,才能熟练应用拦截器

(1 ) ( , , ) 方法,顾名思义,该方法将在请求处理之前进行调用。 中的 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个 。每个 的调用会依据它的声明顺序依次执行,而且最先执行的都是 中的 方法,所以可以在这个方法中进行一些前置初始化操作或者是对当前请求的一个预处理,也可以在这个方法中进行一些判断来决定请求是否要继续进行下去。该方法的返回值是布尔值 类型的,当它返回为false 时,表示请求结束,后续的 和 都不会再执行;当返回值为true 时就会继续调用下一个 的 方法,如果已经是最后一个 的时候就会是调用当前请求的 方法。

(2 ) ( , , , ) 方法,由 方法的解释我们知道这个方法包括后面要说到的 方法都只能是在当前所属的 的 方法的返回值为true 时才能被调用。 方法,顾名思义就是在当前请求进行处理之后,也就是 方法调用之后执行,但是它会在 进行视图返回渲染之前被调用,所以我们可以在这个方法中对 处理之后的 对象进行操作。 方法被调用的方向跟 是相反的,也就是说先声明的 的 方法反而会后执行,这和 里面的 的执行过程有点类型。 里面的 的执行过程也是链式的,只是在 里面需要手动调用 的 方法来触发对下一个 或者是 的调用,然后每一个 中在 方法调用之前的内容都是按照声明顺序执行的,而 方法之后的内容就是反向的。

(3 )( , , , ex) 方法,该方法也是需要当前对应的 的 方法的返回值为true 时才会执行。顾名思义,该方法将在整个请求结束之后,也就是在 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。

(三)通过对以上拦截器基础知识的回顾,现在我们就直接上撸代码吧

创建一个拦截器类(要继承apter 这个类)

拦截器使用规范__拦截器使用场景

apter 因为实现了接口 所以在这里要实现接口中的三个方法

在我们的拦截器类中,根据实际需要用到哪个就重写父类(apter )的方法

其实,主要是想让大家看一下我标红的地方。首先是返回值(上面的内容中已经介绍,大家可以结合代码进行验证)

其次,是右边一栏的标红。如果我们想在方法中(方法执行结束渲染视图之前)获取到所拦截方法处理逻辑的返回信息(如map 类型的返回值-,等)。当然我们可以从中获取(返回结果塞入,拦截器获取)。如果是对于@ajax异步方法,这样是获取不到的 为null(已测试过)。也考虑过从中获取,但是百度了很多地方,也尝试了别人的一些做法,但是都没有成功。最终,我采用的是在所拦截方法的之前,将结果存入中(.("xxx")),然后在自定义的拦截器类中从中获取(.("xxx")),这样就解决了问题(这是一个小插曲,在实际工作中遇到过,大家莫怪……)

拦截器使用场景__拦截器使用规范

重写父类的方法 在里面写自己想要的逻辑代码即可

拦截器使用规范__拦截器使用场景

拦截器使用规范_拦截器使用场景_

当然啦,还有一个更重要的一步必须要做的,否则咱们的拦截器是无效的(xml中配置拦截器请求拦截)

拦截器使用场景_拦截器使用规范_

注:红框内代表自定义拦截器类的全路径(包名+类名)

蓝框代表需要拦截的此类中的方法

如果是拦截所有,就用path="/**" 默认拦截所有请求

如果想拦截一个类中或者匹配的请求中,排除一些不用拦截的方法要根据实际情况而定

.0及以下是不支持"/admin/login"/>//不拦截的url这个配置的

遇到这种情况要么就升级版本,要么就只能配置所有的拦截方法了啊

小伙伴们,有更好的方法可以贴出来分享以下拉……

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了