Shiro是一个简单的安全框架,主要功能有认证,授权,加密,会话管理,Web集成,缓存等。对比起来Spring Security,可能没有Spring Security功能强大,但是在实际工作中并不需要那么复杂的东西,所以简单的Shrio对于我们来说就足够了。
这一次我们只谈谈简单使用,包括认证和授权,不考虑其源码和深层次的东西。我也只是第一次使用测试,想做个记录,有很多不足之处还望谅解。
环境配置
首先我们要进行相对应的环境配置,除了相对应的SpringBoot启动器和Web启动器外,还添加了SpringBoot默认模板引擎Thymeleaf的相应配置,因为我用的是SpringBoot1.5.19的版本而不是2.0所以thymeleaf默认的是2.0版本,thymeleaf-layout默认是1.0,我们需要将thymeleaf版本改成3.0和其thymeleaf相对应的2.0版本,如图所示
重点是Shiro,使用版本是1.4.0
Shiro配置
shiro配置主要包含三步:
1.创建ShiroFilterFacoryBean
2.创建DefaultWebSecurityManager
3.创建自定义的Realm类,Shiro会从Realm类中进行认证逻辑和授权逻辑的处理
登陆认证
shiro登陆认证也是分为三步:
1.通过SecurityUtils获取subject对象
2.封装当前登陆用户的账号密码
3.执行登陆方法通过抛出shiro封装好的异常来确定登陆状态
执行登陆认证
通过认证出来的token对象取出登陆用户的信息,并判断该用户的状态,如果不存在则直接返回空,
shiro抛出用户名不存在的异常,然后直接返回一个AuthenticationInfo的实现类,我们这里直接返回一个SimpleAuthenticationInfo就行了,将从数据库取出来封装了所有相关属性的user和密码返回就行,shirp会帮我们进行密码校验。
执行授权逻辑
创建一个SimpleAuthorziationInfo对象,将当前用户的角色以及对应的权限通过addRoles或者addStringPermissions方法加入Info。因为用户角色权限的关系需要根据实际情况来选择,图中给了点示例,可以参考,最后将info对象返回。
shiro标签
以上已经完成了简单的权限控制,想在界面更好的优化(比如隐藏相应的资源)可以通过shiro的标签来进行操作,需要导入额外的依赖thymeleaf-extras-shiro,html头文件也需要做相应的声明,以下举例两个简单的shiro标签
写在末尾的话
第一次写博客第一次用shiro,不论是技术还是博客都很粗糙,我依然很菜,希望大家学习顺利,成为大牛。