使用subjects 主题 用于交互
SecurityManager:安全管理器
realm域:用户的登入信息,和权限信息,最终和数据库中的进行比较
shiro是基于大量的过滤器实现的
访问登入相关的资源,静态资源,直接放行,使用的是匿名过滤器
访问一些业务资源需要是否登入(身份过滤器),是否有权限(权限过滤器),退出的时候销毁session(登出过滤器)
1,在web.xml中配置代理过滤器,生命周期交给spring管理,
2,创建一个shiro.xml,自己创建一个realm域,中写拦截规则和自定义密码比较器,静态资源设置匿名过滤器
3,写一个类继承AuthorizingRealm,权限验证的一个类,里面有两个方法,一个是身份验证操作获取身份验证信息,一个是权限验证操作
4,自定义密码比较器,继承SimpleCredentialsMatcher,重写密码比较的方法
权限操作流程
1,判断用户名和密码是否为空
2,将用户名和密码封装成token(令牌对象)
3,获取subject对象
4,调用subject的login方法,传入令牌
5,没有报异常就登入成功了,有异常就登入失败了
6,从shiro中获取用户信息,放到session中
7,根据用户查询权限模块,放到session中
8,转发到后台主页。
自定义realm类中身份认证操作
1,从令牌中获取用户名
2,通过用户名获取对象
3,判断用户名是否为空
若为空返回null,底层会报异常,
不为空,将用户对象,数据库密码,realm域的名字封装成身份认证操作返回
自定义密码比较器
1,获取令牌中的用户名和密码
2,获取身份验证信息中的数据库密码
3,返回俩密码的比较信息(一致返回true,不一致返回false,底层报异常)
退出操作
在xml文件中配置
shiro权限验证操作
权限不足的情况下跳到shiro配置中配置的登入权限不足的页面
获取用户中有哪些权限
1,编写realm中获取权限验证操作,获取用户
2,调用service获取用户权限模块列表
3,将权限列表转成权限验证对象中需要的数据
遍历模块列表,将每个模块放入set中
将set给权限验证对象,info.setStringPermissions(set)
xml方式
在shiro的配置文件中给权限设置
访问某个链接的时候必须用在 perms 后面设置的所有权限才可以访问
shiro页面配置权限
1前端导入标签库,有就显示标签,没有就不显示标签
<shiro:haspermission name = “删除部门”>,有权限就显示删除权限,没有就不显示。
shiro缓存优化,每次查询都需要查询数据库有无权限,但是权限有不经常修改,使用shiro自带缓存器,在realm中注入缓存管理器
shiro常用过滤器
自己使用的真实感受,希望大家喜欢,每个字都是自己手打的呦,如果有不对的,或者不懂的地方请私聊我,或者在下方评论。