shiro AccessControlFilter运行步骤

shiro AccessControlFilter运行步骤

介绍

任何筛选器的超类,用于控制对资源的访问,并可能将用户重定向到登录页面 如果它们未经身份验证。
此超类提供方法saveRequestAndRedirectToLogin(javax.servlet.ServletRequest,javax.servlet.ServletResponse),许多子类将其用作用户未经身份验证时的行为

AccessControlFilter提供了访问控制的基础功能;比如是否允许访问/当访问拒绝时如何处理等:在这里插入图片描述
isAccessAllowed:表示是否允许访问;mappedValue就是[urls]配置中拦截器参数部分,如果允许访问返回true,否则false;

onAccessDenied:表示当访问拒绝时是否已经处理了;如果返回true表示需要继续处理;如果返回false表示该拦截器实例已经处理了,将直接返回即可。

onPreHandle会自动调用这两个方法决定是否继续处理:
在这里插入图片描述
可以发现他是调用的isAccessAllowed方法和onAccessDenied方法,只要两者有一个可以就可以了,从名字中我们也可以理解,他的逻辑是这样:先调用isAccessAllowed,如果返回的是true,则直接放行执行后面的filter和servlet,如果返回的是false,则继续执行后面的onAccessDenied方法,如果后面返回的是true则也可以有权限继续执行后面的filter和servelt。
只有两个函数都返回false才会阻止后面的filter和servlet的执行。

执行流程

当我们继承AccessControlFilter 类,isAccessAllowed方法在这个类中都是抽象的,依靠实现类实现。onAccessDenied方法不是抽象的,但是调用了另一个抽象的方法:
org.apache.shiro.web.filter.AccessControlFilter.onAccessDenied(ServletRequest, ServletResponse)
这个方法忽略了之前配置的param参数。

当请求进来之后,率先onPreHandle()方法,前置方法里面 我们可以进行日志操作 验证码 等等,然后调用实现类的isAccessAllowed() 方法,如果返回false,则会接着调用onAccessDenied()。

总结

shiro 提供的方法,可以利用其特性 进行类似 验证码校验,前置校验等等

路漫漫其修远兮,吾将上下而求索
希望可以帮助到你

其他相关链接

shiro提供的filter-AccessControlFilter
【shiro】AccessControlFilter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值