shiro与SSM项目整合
来源:互联网 发布:php set 编辑:程序博客网 时间:2024/05/01 11:45
shiro于SSM整合所有的jar包
web.xml中配置shiro的filter
在web系统中,shiro也通过filter进行拦截。filter拦截后将操作权交给spring中配置的filterChain(过虑链儿)
shiro提供很多filter。
applicationContext-shiro.xml
在applicationContext-shiro.xml 中配置web.xml中fitler对应spring容器中的bean。
静态资源
对静态资源设置逆名访问:
修改applicationContext-shiro.xml
登陆
原理
使用FormAuthenticationFilter过虑器实现 ,原理如下:
将用户没有认证时,请求loginurl进行认证,用户身份和用户密码提交数据到loginurl
FormAuthenticationFilter拦截住取出request中的username和password(两个参数名称是可以配置的)
FormAuthenticationFilter调用realm传入一个token(username和password)
realm认证时根据username查询用户信息(在Activeuser中存储,包括 userid、usercode、username、menus)。
如果查询不到,realm返回null,FormAuthenticationFilter向request域中填充一个参数(记录了异常信息)
在登录页面中,由于FormAuthenticationFilter的用户身份和密码的input的默认值(username和password),修改页面的账号和密码 的input的名称为username和password
认证拦截过虑器
在applicationContext-shiro.xml中配置
退出
使用LogoutFilter
不用我们去实现退出,只要去访问一个退出的url(该 url是可以不存在),由LogoutFilter拦截住,清除session。
在applicationContext-shiro.xml配置LogoutFilter
授权过虑器测试
使用PermissionsAuthorizationFilter
在applicationContext-shiro.xml中配置url所对应的权限。
测试流程:
1、在applicationContext-shiro.xml中配置filter规则
- 1
- 2
- 1
- 2
2、用户在认证通过后,请求/items/queryItems.action
3、被PermissionsAuthorizationFilter拦截,发现需要“item:query”权限
4、PermissionsAuthorizationFilter调用realm中的doGetAuthorizationInfo获取数据库中正确的权限
5、PermissionsAuthorizationFilter对item:query 和从realm中获取权限进行对比,如果“item:query”在realm返回的权限列表中,授权通过。
问题总结
1、在applicationContext-shiro.xml中配置过虑器链接,需要将全部的url和权限对应起来进行配置,比较发麻不方便使用。
2、每次授权都需要调用realm查询数据库,对于系统性能有很大影响,可以通过shiro缓存来解决。
shiro的过虑器
过滤器简称 对应的Java类
anon org.apache.shiro.web.filter.authc.AnonymousFilterauthc org.apache.shiro.web.filter.authc.FormAuthenticationFilterauthcBasic org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilterperms org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilterport org.apache.shiro.web.filter.authz.PortFilterrest org.apache.shiro.web.filter.authz.HttpMethodPermissionFilterroles org.apache.shiro.web.filter.authz.RolesAuthorizationFilterssl org.apache.shiro.web.filter.authz.SslFilteruser org.apache.shiro.web.filter.authc.UserFilterlogout org.apache.shiro.web.filter.authc.LogoutFilteranon:例子/admins/**=anon 没有参数,表示可以匿名使用。authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,FormAuthenticationFilter是表单认证,没有参数 perms:例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。user:例如/admins/user/**=user没有参数表示必须存在用户, 身份认证通过或通过记住我认证通过的可以访问,当登入操作时不做检查
认证
设置凭证匹配器
数据库中存储到的md5的散列值,在realm中需要设置数据库中的散列值它使用散列算法 及散列次数,让shiro进行散列对比时和原始数据库中的散列值使用的算法 一致。
授权
修改realm的doGetAuthorizationInfo,从数据库查询权限信息。
使用注解式授权方法。
使用jsp标签授权方法。
开启controller类aop支持
对系统中类的方法给用户授权,建议在controller层进行方法授权。
在springmvc.xml中配置
在controller方法中添加注解
jsp标签 授权
Jsp页面添加:
- 1
- 1
标签名称 标签条件(均是显示标签内容)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
修改itemsList.jsp页面
授权测试
当调用controller的一个方法,由于该 方法加了@RequiresPermissions(“item:query”) ,shiro调用realm获取数据库中的权限信息,看”item:query”是否在权限数据中存在,如果不存在就拒绝访问,如果存在就授权通过。
当展示一个jsp页面时,页面中如果遇到<shiro:hasPermission name="item:update">
,shiro调用realm获取数据库中的权限信息,看item:update是否在权限数据中存在,如果不存在就拒绝访问,如果存在就授权通过。
问题:只要遇到注解或jsp标签的授权,都会调用realm方法查询数据库,需要使用缓存解决此问题。
- shiro与SSM项目整合
- shiro与SSM项目整合
- ssm整合shiro
- ssm+shiro+UEditor整合
- SSM+shiro整合
- 7、ssm整合shiro
- SSM整合shiro完整版
- JavaWeb项目:Shiro实现简单的权限控制(整合SSM)
- 【SSM框架 SSM项目源码 SSM源码 下载】java框架整合Springmvc+mybatis+shiro+bootstrap
- 【SSM框架 SSM项目源码 SSM源码 下载】java框架整合Springmvc+mybatis+shiro+bootstrap
- ssm项目集成shiro
- Maven+SSM+Shiro整合配置
- ssm整合shiro实现权限
- Maven+SSM+Shiro整合配置
- SSM+shiro+maven整合配置
- Maven+SSM+Shiro整合配置
- SSM + Shiro 整合(4)- 在 Web 项目中添加 Shiro
- shiro与spring web项目整合
- 建立空间索引
- 微信开发之——接口调用频率xianzh
- iOS runtime forwardInvocation一些总结
- 【hdu 5996】dingyeye loves stone
- Microsoft.Jet.OLEDB.4.0 导出数据到excel
- shiro与SSM项目整合
- java.lang.IllegalMonitorStateException
- swoole-swoole是什么能做什么
- 华为荣耀6 安装失败
- JAVA设计模式之单例模式
- VGA连接电平转换适用芯片,匹配电平
- [C语言] 深度遍历的方法
- tomcat的类加载机制
- nyoj117——用归并排序求逆序数