明确需求: e% I Z, A. ]- v8 O# `
1 T$ m8 Q9 G1 v# e9 T在使用Shiro的时候,鉴权失败一般都是返回一个错误页或者登录页给前端,特别是后台系统,这种模式用的特别多。但是现在的项目越来越多的趋向于使用前后端分离的方式开发,这时候就需要响应Json数据给前端了,前端再根据状态码做相应的操作。那么Shiro框架能不能在鉴权失败的时候直接返回Json数据呢?答案当然是可以。
3 `/ {) R4 p9 k4 d( s/ _, t6 | ~9 Q9 p) U其实Shiro的自定义过滤器功能特别强大,可以实现很多实用的功能,向前端返回Json数据自然不在话下。通常我们没有去关注它是因为Shiro内置的一下过滤器功能已经比较全了,后台系统的权限控制基本上只需要使用Shiro内置的一些过滤器就能实现了,此处再次贴上这个图。
2 N5 k# O) n1 b9 ^2 D
3 r0 ]" w# [0 m8 i! Q D$ s相关文档地址:http://shiro.apache.org/web.html#default-filters
& P$ ^3 _: ?5 p$ A' T% Z; _我最近的一个项目是需要为手机APP提供功能接口,需要做用户登录,Session持久化以及Session共享,但不需要细粒度的权限控制。面对这个需求我第一个想到的就是集成Shiro了,Session的持久化及共享在Shiro系列第二篇已经讲过了,那么这篇顺便用一下Shiro中的自定义过滤器。因为不需要提供细粒度权限控制,只需要做登录鉴权,而且鉴权失败后需要向前端响应Json数据,那么使用自定义Filter再好不过了。, j' Y1 a3 v! ^3 S+ V: y/ n7 {
自定义Filter
3 l9 E' s% x5 @# C
' g+ B' B9 I' ?! p- l还是以第一篇的Demo为例,项目地址在文章尾部有放上,本篇在之前的代码上继续添加功能。
: v E' E- p' f/ z! w6 C4 W; z4 K首发地址:https://www.guitu18.com/post/2020/01/06/64.html; ~" T- p- t& @
在实现自定义Filter之前,我们先看看这个类:org.apache.shiro.web.filter.AccessControlFilter,点开它的子类&