shiro框架学习笔记(6)——登录认证+过滤器链+退出logout 5.8 登陆
5.8.1 原理
使⽤FormAuthenticationFilter过虑器实现 ,原理如下:
将⽤户没有认证时,请求loginurl进⾏认证,⽤户⾝份和⽤户密码提交数据到loginurl
FormAuthenticationFilter拦截住取出request中的username和password(两个参数名称是可以配置的)
FormAuthenticationFilter调⽤realm传⼊⼀个token(username和password)
realm认证时根据username查询⽤户信息(在Activeuser中存储,包括 userid、usercode、username、menus)。
如果查询不到,realm返回null,FormAuthenticationFilter向request域中填充⼀个参数(记录了异常信息)
5.8.2 登陆页⾯
由于FormAuthenticationFilter的⽤户⾝份和密码的input的默认值(username和password),修改页⾯
的账号和密码 的input的名称为username和password
5.8.3 登陆代码实现
5.8.4 认证拦截过虑器
在l中配置:
shiro安全框架5.9 退出
5.9.1 使⽤LogoutFilter
不⽤我们去实现退出,只要去访问⼀个退出的url(该 url是可以不存在),由LogoutFilter拦截住,清除session。在l配置LogoutFilter:
可以删除原来的logout的controller⽅法代码。
5.10 认证信息在页⾯显⽰
1、认证后⽤户菜单在⾸页显⽰
2、认证后⽤户的信息在页头显⽰
5.10.1 修改realm设置完整认证信息
realm从数据库查询⽤户信息,将⽤户菜单、usercode、username等设置在SimpleAuthenticationInfo中。
先使⽤静态代码实现:
5.10.2 修改first.action将认证信息在页⾯显⽰
5.11 授权过虑器测试
5.11.1 使⽤PermissionsAuthorizationFilter
在l中配置url所对应的权限。
测试流程:
1、在l中配置filter规则
<!--商品查询需要商品查询权限  -->
/items/queryItems.action = perms[item:query]
2、⽤户在认证通过后,请求/items/queryItems.action
3、被PermissionsAuthorizationFilter拦截,发现需要“item:query”权限
4、PermissionsAuthorizationFilter调⽤realm中的doGetAuthorizationInfo获取数据库中正确的权限
5、PermissionsAuthorizationFilter对item:query 和从realm中获取权限进⾏对⽐,如果“item:query”在realm返回的权限列表中,授权通过。
5.11.2 创建refuse.jsp
如果授权失败,跳转到refuse.jsp,需要在spring容器中配置:
5.11.3 问题总结
1、在l中配置过虑器链接,需要将全部的url和权限对应起来进⾏配置,⽐较发⿇不⽅便使⽤。
2、每次授权都需要调⽤realm查询数据库,对于系统性能有很⼤影响,可以通过shiro缓存来解决。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。