2024年6月14日发(作者:)
shiro认证时拦截器的isAccessAllowed和
onAccessDenied执行流程
1. 拦截器的isAccessAllowed方法执行流程:
首先,当用户请求访问一些资源时,shiro会通过过滤器链将请求传
递到拦截器中。拦截器首先会判断当前用户是否已经通过认证,如果用户
已经通过认证,则直接返回true,并允许用户访问资源。这是因为在认
证通过后,shiro会将用户信息保存在Subject对象中,拦截器可以通过
该对象获取当前用户的认证信息。
如果用户还未通过认证,则拦截器会进一步判断当前请求是否需要进
行认证。这一步是通过调用Subject对象的isAuthenticated方法来判断
的。如果返回true,则表示当前请求需要进行认证,拦截器会将控制权
交给shiro的认证器进行处理,并返回false。认证器会根据配置的
Realm对象进行具体的认证操作,例如验证用户名和密码。
如果返回false,则表示当前请求不需要进行认证,拦截器会直接返
回true,并允许用户访问资源。这种情况通常用于设置一些公开资源,
例如网站首页等,不需要进行用户认证。
2. 拦截器的onAccessDenied方法执行流程:
当拦截器的isAccessAllowed方法返回false时,表明当前请求需要
进行认证。此时,拦截器会进入onAccessDenied方法的执行流程。
首先,拦截器会获取到当前的Subject对象,并将请求的相对路径保
存在session中。这是为了在用户认证通过后,可以重定向到该请求的页
面。
然后,拦截器会判断当前请求是否为POST请求。如果是POST请求,
拦截器会将当前请求的页面路径保存在session中。这是因为在不同的认
证方式下,shiro会分别处理GET请求和POST请求,POST请求一般用于
提交用户的认证信息(例如用户名和密码),而GET请求用于显示登录页
面。
接下来,拦截器会执行shiro的登录方法,该方法会根据配置的认证
器进行具体的认证操作。认证器会根据用户提交的认证信息进行认证,并
返回认证结果。
如果认证成功,拦截器会获取用户请求的相对路径,从session中取
出,并将请求重定向到该路径。重定向操作可以通过shiro提供的工具类
进行处理。
如果认证失败,拦截器会将请求转发到登录页面,并返回false,不
允许用户访问资源。
总结:
通过isAccessAllowed和onAccessDenied方法,拦截器可以完成用
户访问权限的控制。isAccessAllowed方法用于判断当前用户是否可以访
问该资源,如果可以,则返回true;否则,返回false,并执行
onAccessDenied方法。onAccessDenied方法用于处理用户认证操作,并
根据认证结果进行相应的页面跳转。


发布评论