【Shiro】


十、Spring Boot整合Shiro实现登录认证

整体项目结构。省略数据访问层相关代码,使用固定数据进行认证。

使用java修改密码 java修改密码流程图_java判断用户是否在某一个区域登录

1、添加依赖

使用java修改密码 java修改密码流程图_复选框_02

2、编写配置文件

新建application.yml

使用java修改密码 java修改密码流程图_使用java修改密码_03

3、新建实体类

新建com.bjsxt.pojo.User

使用java修改密码 java修改密码流程图_使用java修改密码_04

4、编写业务层代码

新建com.bjsxt.service.UserService及实现类

使用java修改密码 java修改密码流程图_java修改密码_05


使用java修改密码 java修改密码流程图_使用java修改密码_06

5、自定义Realm

新建com.bjsxt.realm.MyRealm编写认证逻辑

使用java修改密码 java修改密码流程图_java修改密码_07

6、编写配置

新建com.bjsxt.config.ShiroConfig,编写配置

使用java修改密码 java修改密码流程图_java修改密码_08

7、编写控制器

新建com.bjsxt.controller.UserController

使用java修改密码 java修改密码流程图_java修改密码_09

8、编写启动类

新建com.bjsxt.ShiroApplication

使用java修改密码 java修改密码流程图_html页面_10

9、编写页面

9.1 编写登录页面

新建templates/login.html

使用java修改密码 java修改密码流程图_使用java修改密码_11

9.2 编写主页面

新建templates/login.html。页面中虽然编写内容

使用java修改密码 java修改密码流程图_java修改密码_12


十一、凭证匹配器

1、修改ShiroConfig

使用java修改密码 java修改密码流程图_java修改密码_13

2、修改UserServiceImpl

模拟从数据库查询出来的密码是加密的密码。

此加密数据是”admin”加盐”123”迭代两次加密的结果。

使用java修改密码 java修改密码流程图_java修改密码_14

3、修改MyRealm

修改MyRealm中doGetAuthenticationInfo方法。把盐添加进去。

使用java修改密码 java修改密码流程图_java判断用户是否在某一个区域登录_15


十二、remember me实现

1、修改ShiroConfig

秘钥长度为16位,使用的是AES加密。

使用java修改密码 java修改密码流程图_java判断用户是否在某一个区域登录_16

使用java修改密码 java修改密码流程图_复选框_17

2、修改控制器方法

修改控制doLogin方法,在UsernamePasswordToken中添加第三个参数。表示是否启用remember me功能。

此功能应该在页面中添加一个复选框,代码中直接假设用户勾选了复选框

使用java修改密码 java修改密码流程图_html页面_18


十三、退出实现

1、修改配置类

修改ShiroConfig类,添加logout filter 对应的url。

红色部分为新增内容。

使用java修改密码 java修改密码流程图_html页面_19

2、修改主页面

在index.html页面中添加超链接。跳转到/logout后会由shiro内置filter进行拦截。

使用java修改密码 java修改密码流程图_java判断用户是否在某一个区域登录_20


十四、授权

授权就是判断认证用户是否具有指定角色或指定权限。

Shiro可以和JSP整合也可以和Thymeleaf整合,我们讲解SpringBoot的视图技术Thymeleaf整合Shiro。

只要是授权就执行Realm的doGetAuthorizationInfo进行判断,而触发doGetAuthorizationInfo的方式,常用的就两种:

(1)在页面中通过shiro:xxxx 属性进行判断

(2)在java代码中通过注解@RequiresXXX/config文件中配置

1、thymeleaf中常用属性

需要在html页面中添加属性

使用java修改密码 java修改密码流程图_使用java修改密码_21

1.1 shiro:user=””

认证通过或已记住的用户。

1.2 shiro:authenticated=””

认证通过的用户。不包含记住的用户。

1.3 shiro:principal

输出认证用户信息。<shiro:principal/>

1.4 shiro:hasRole="admin"

判断是否具有指定角色。

1.5 shiro:lacksRole="admin"

判断是否具有指定角色。

1.6 shiro:hasAllRoles="role1,role2"

判断指定角色用户是否都具有。

1.7 shiro:hasAnyRoles="role1,role2"

只要用户具有其中一个角色就表示判断通过。

1.8 shiro:hasPermission="userInfo:add"

是否具有指定权限。

1.9 shiro:lacksPermission="userInfo:del"

是否不具有指定权限

1.10 shiro:hasAllPermissions="userInfo:view, userInfo:add"

是否全具有指定权限。

1.11 shiro:hasAnyPermissions="userInfo:view, userInfo:del"

只要有其中任何一个权限即可。


海量Java学习资料,大厂面试题,项目练习题,统统免费提供,只要关注,那就会有收获~笔芯~