1.在SSM框架完整jar包的基础上添加三个shiro的jar包
shiro-core
shiro-spring
shiro-web
因为要涉及到页面(用到了C标签),这里也导入jstl页面。
Shrio作为一个权限框架,一般都是最后才加
Shiro整合配置。
Shiro和Web整合–配置web.xml文件
Shiro在web里面整合靠的还是一个过滤器,只要有和权限相关的请求,它就要走这个过滤器,所以首先配置一个过滤器ShiroFilter(在web。xml中配置 )。
自行搜索:==DelegatingFileProxy==这个代理过滤器。添加它的源码,拷贝全限定类名。
注意:在做Shiro和web整合的时候,这个过滤器的名字不能乱起,底层只能叫这个ShiroFilter。
在之后配置Shiro的时候,会用到这个参数名称。
过滤器的一些参数:
/* 就是拦截所有的请求。
Shiro和Spring整合–配置spring-shiro.xml文件
既然在Spring里面配置的话,就按照Spring的命名规范:
这样的话,之后扫描扫Spring-*的配置i文件也可以扫到他。
Shiro第一步 配置安全管理器。在Spring里面就是一个Bean
配置了上面的某些属性之后,默认会调这些属性后面的过滤器。
建立controller 控制权限(在这里面设置跳转页面)
根据FormAuthenticationFilter里面的默认参数内容可以得到下面这个关键字:
shiroLoginFailure:shiro在进行认证的时候 可能会出现异常。若出现异常的话,会把异常信息(异常的类的名字)存在这个域里面
可以通过判断不同的异常类型来做异常判断
认证失败以后,打回到登陆页面。若登录成功,会自动跳转到配置的成功跳转页面,没有配置,会跳转到上一次的登陆页面。
静态资源配置:
在登录界面(或者随便一个界面)设置一个静态资源
在spring-shiro里面设置静态资源不需要认证
设置退出
测试:
若账号密码错误
红色字体,说明静态资源未被拦截。
正常登录,正常退出。
通过逆向工程生成单表的增删改查。
操作方法:
https://blog.youkuaiyun.com/qq_39056805/article/details/80585941
创建一个业务类实体
业务实体:根据业务需要创建的实体,和表的结构不一定完全一直。
修改认证方法
认证信息返回的身份信息是一个activeUser,查询用户信息,和用户的菜单
认证成功,保存到Session
原来的index.jsp的内容放入一个新的页面first.jsp
left.jsp
10.商品查询测试
现在只有认证,没有授权,登录成功以后,点击菜单,就可以执行改操作
11.授权
修改spring-shiro.xml
测试,当前用户没有item:query权限
realm中添加授权
测试,可以执行添加
添加数据库查询功能,从数据库中查数据
13.ShrioSerivce
14.MyRealm改为动态代码,认证方法改为从数据库中查询用户信息。
15.配置凭证匹配器
授权连接数据库
使用授权注解和标签
修改spring-mvc.xml
使用shiro标签
首先引入shiro标签库
测试
3.Shiro缓存
认证成功以后,不需要多次认证。使用授权标签和授权注解,每次执行都会调用获取授权信息的方法。
使用缓存解决。ehcache
jar包配置文件
:
其中这个xml文件来自ehcache-core.jar包里面,拖出来改名即可。
jar包导入,xml文件导入
这个xml文件就是缓存的默认配置。
在SecurityManager里面配置ehcache属性
正常退出,清空缓存。
非正常退出,清空缓存。
用户正常在线,管理员修改了权限,缓存中的权限还是有效。
MyReaml添加方法
随便找一个Controller,在里面写一个方法来调用这个clearCache. 模拟执行清空缓存。
4.Session管理
Web项目可以通过SessionAPI和web.xml配置Session的过期时间,整合shiro 以后,可以通过shiro
管理Session
5.验证码
进入BaseServlet,有以前写的验证码方法
吧这里面的代码复制出来,在我们的项目中重新建一个verifyCode
建立verifyCodeController
在xml文件里面设置不拦截
登陆界面添加。
这样就有了。
接下来如何在登录的时候验证?
通过过滤器。
建立过滤器,继承FormAuthenticationFilter
source–OverRide/Implement Methods 自己重写这个方法。