AuthorizingRealm中的两大方法
doGetAuthenticationInfo和doGetAuthorizationInfo的区别
这两个方法名字中只有Authen和Author的区别,非常容易混淆。
- 其中Authen单词意思是:认证,所以doGetAuthenticationInfo方法功能就是认证(登录);
- 而Author就是authority简写,这个单词意思是:权利,所以doGetAuthorizationInfo方法功能就是授权。
方法 | 功能 |
---|---|
doGetAuthenticationInfo | 认证 |
doGetAuthorizationInfo | 授权 |
doGetAuthenticationInfo
该方法需要的参数是AuthenticationToken对象,AuthenticationToken 用于收集前端提交的身份(如用户名)及凭据(如密码),通过该参数传入数据与后端用户数据(用户数据库等)进行密码比对,最终判断用户登录成功与否
doGetAuthorizationInfo
该方法需要的参数是PrincipalCollection对象,这个对象表示经过认证后的登录主体,这个方法作用就是要给这个登录的主体授权,返回一个授权后的主体simpleAuthorizationInfo
下面是自定义ream类继承了AuthorizingRealm类的代码
参考原文在这里
package com.wsl.shiro;import com.wsl.bean.Permissions;
import com.wsl.bean.Role;
import com.wsl.bean.User;
import com.wsl.service.LoginService;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;public class CustomRealm extends AuthorizingRealm {//查找本地用户信息的业务层@Autowiredprivate LoginService loginService;/*** @方法名 doGetAuthenticationInfo* @描述 认证配置类* @参数 [authenticationToken]* @返回值 AuthenticationInfo*/@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {if (StringUtils.isEmpty(authenticationToken.getPrincipal())) {return null;}//获取用户信息String name = authenticationToken.getPrincipal().toString();User user = loginService.getUserByName(name);if (user == null) {//这里返回后会报出对应异常return null;} else {//这里验证authenticationToken和simpleAuthenticationInfo的信息SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(name, user.getPassword().toString(), getName());return simpleAuthenticationInfo;}}/*** @方法名 doGetAuthorizationInfo* @描述 权限配置类* @参数 [principalCollection]* @返回值 AuthorizationInfo*/@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {//获取登录用户名String name = (String) principalCollection.getPrimaryPrincipal();//查询用户名称User user = loginService.getUserByName(name);//添加角色和权限SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();for (Role role : user.getRoles()) {//添加角色simpleAuthorizationInfo.addRole(role.getRoleName());//添加权限for (Permissions permissions : role.getPermissions()) {simpleAuthorizationInfo.addStringPermission(permissions.getPermissionsName());}}return simpleAuthorizationInfo;}}
AuthorizingRealm中的两大方法相关推荐
- Kaggle上主要有两大方法:梯度提升机和深度学习
Python深度学习: 在2016年和2017年,Kaggle上主要有两大方法:梯度提升机和深度学习.具体而言,梯度提升机用于处理结构化数据的问题,而深度学习则用于图像分类等感知问题.使用前一种方法的 ...
- 过拟合和欠拟合_现代深度学习解决方案中的两大挑战:拟合和欠拟合
全文共2306字,预计学习时长5分钟 对机器学习模型而言,最糟糕的两种情况无非是构建无用的知识体系,或是从训练数据集中一无所获.在机器学习理论中,这两种现象分别被称为过拟合和欠拟合,是现代深度学习解决 ...
- 新零售品牌“三只松鼠”遇挫,摆脱困境的两大方法
还有两个星期春节就要来了.一年到头在工作的年轻人,不是在回家的路上,就是在准备回家的路上. 礼物,回家总是要带一些的. 可是,带什么礼物好?年年买礼物总是这么迷茫.因为 送礼物前都是这样的 收到礼物后 ...
- 水平集方法引入主动轮廓模型算法中的两种方法
水平集方法引入主动轮廓模型算法中的两种方法 1.传统的基于主动轮廓模型和水平集理论的方法 2.变分水平集方法 在讲解水平集理论在主动轮廓模型中的应用前,我们先用流程图说明一下常见的处理主动轮廓模型的流 ...
- Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略
Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略 目录 graph_feature函数:为给定的特征生成特征谱系图
- Object类中的两个方法——wait和notify使用总结
Object类中的wait .和 notify方法是用来处理线程的方法,既然定义在Object类中,两个方法的重要程度可见一斑: 两个方法的使用上都很复杂:通过阅读API获得更多对方法的理解: The ...
- 设计一个接口, 并设计一个实现类实现该接口,演示它们的使用。具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye()。
设计一个接口, 并设计一个实现类实现该接口,演示它们的使用. 具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye().然后,创建两个实现了Person接口的 ...
- MATLAB 保存imshow绘制图片到指定文件夹中的两种方法
MATLAB 保存imshow绘制图片到指定文件夹中的两种方法 imwrite函数 imwrite(image,filename) imwrite(image,filename)是将图像数据image ...
- 创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 编程利用Rectangle输出一个矩形的周长和面积
创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 编程利用Rectangle输出一个矩形的周长和面积 publi ...
- 90页第三题,创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 ,编程利用Rectangle输出一个矩形的
//90页第三题,创建一个 Rectangle类,添加width和lenght两个成员变量 //在 Rectangle类中添加两种方法分别计算矩形的周长和面积 //编程利用Rectangle输出一个矩 ...
最新文章
- linux mysql 操作命令_linux的mysql操作命令
- Qt——容器类(译)
- B - Linear Algebra Test————只给思路
- 打造具备互补测试技能的团队
- Windows XP环境下Apache2.2.21和Tomcat7.0.26下的整合
- 将客户端图片保存到数据库中的方法
- 12.MYSQL高级(二)
- 【Elasticsearch】Named Entity Annotations in Elasticsearch es 实体 注解
- mac Sourcetree 账号密码输入错误后, 重新输入的方法
- 七个办法只有一个有效:200 PORT command successful. Consider using PASV.425 Failed to establish connection.
- mapxtreme 论坛_会议纪要 | 取栓论坛 云端论剑 大梗死核心取栓专场 精华回顾
- IBM ServerGuide引导安装指南
- 学习python的字符串组合
- python怎么设置颜色深浅变化_【opencv_python学习之三】图像处理(一)更改色彩模式...
- 收银员使用的条码扫描枪如何判断好坏?
- 智齿徐懿 | 一个“外行”眼中的呼叫中心系统未来
- 吉林大学计算机专硕和学硕的区别,在吉林大学在职研究生项目中专硕和学硕的区别是什么...
- 第一部android手机,安卓手机诞生十年,第一部Android 一.零手机长这样
- explaining and harnessing adversarial examples(FGSM)
- MRAM关键工艺步骤