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中的两大方法相关推荐

  1. Kaggle上主要有两大方法:梯度提升机和深度学习

    Python深度学习: 在2016年和2017年,Kaggle上主要有两大方法:梯度提升机和深度学习.具体而言,梯度提升机用于处理结构化数据的问题,而深度学习则用于图像分类等感知问题.使用前一种方法的 ...

  2. 过拟合和欠拟合_现代深度学习解决方案中的两大挑战:拟合和欠拟合

    全文共2306字,预计学习时长5分钟 对机器学习模型而言,最糟糕的两种情况无非是构建无用的知识体系,或是从训练数据集中一无所获.在机器学习理论中,这两种现象分别被称为过拟合和欠拟合,是现代深度学习解决 ...

  3. 新零售品牌“三只松鼠”遇挫,摆脱困境的两大方法

    还有两个星期春节就要来了.一年到头在工作的年轻人,不是在回家的路上,就是在准备回家的路上. 礼物,回家总是要带一些的. 可是,带什么礼物好?年年买礼物总是这么迷茫.因为 送礼物前都是这样的 收到礼物后 ...

  4. 水平集方法引入主动轮廓模型算法中的两种方法

    水平集方法引入主动轮廓模型算法中的两种方法 1.传统的基于主动轮廓模型和水平集理论的方法 2.变分水平集方法 在讲解水平集理论在主动轮廓模型中的应用前,我们先用流程图说明一下常见的处理主动轮廓模型的流 ...

  5. Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略

    Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略 目录 graph_feature函数:为给定的特征生成特征谱系图

  6. Object类中的两个方法——wait和notify使用总结

    Object类中的wait .和 notify方法是用来处理线程的方法,既然定义在Object类中,两个方法的重要程度可见一斑: 两个方法的使用上都很复杂:通过阅读API获得更多对方法的理解: The ...

  7. 设计一个接口, 并设计一个实现类实现该接口,演示它们的使用。具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye()。

    设计一个接口, 并设计一个实现类实现该接口,演示它们的使用. 具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye().然后,创建两个实现了Person接口的 ...

  8. MATLAB 保存imshow绘制图片到指定文件夹中的两种方法

    MATLAB 保存imshow绘制图片到指定文件夹中的两种方法 imwrite函数 imwrite(image,filename) imwrite(image,filename)是将图像数据image ...

  9. 创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 编程利用Rectangle输出一个矩形的周长和面积

    创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 编程利用Rectangle输出一个矩形的周长和面积 publi ...

  10. 90页第三题,创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 ,编程利用Rectangle输出一个矩形的

    //90页第三题,创建一个 Rectangle类,添加width和lenght两个成员变量 //在 Rectangle类中添加两种方法分别计算矩形的周长和面积 //编程利用Rectangle输出一个矩 ...

最新文章

  1. linux mysql 操作命令_linux的mysql操作命令
  2. Qt——容器类(译)
  3. B - Linear Algebra Test————只给思路
  4. 打造具备互补测试技能的团队
  5. Windows XP环境下Apache2.2.21和Tomcat7.0.26下的整合
  6. 将客户端图片保存到数据库中的方法
  7. 12.MYSQL高级(二)
  8. 【Elasticsearch】Named Entity Annotations in Elasticsearch es 实体 注解
  9. mac Sourcetree 账号密码输入错误后, 重新输入的方法
  10. 七个办法只有一个有效:200 PORT command successful. Consider using PASV.425 Failed to establish connection.
  11. mapxtreme 论坛_会议纪要 | 取栓论坛 云端论剑 大梗死核心取栓专场 精华回顾
  12. IBM ServerGuide引导安装指南
  13. 学习python的字符串组合
  14. python怎么设置颜色深浅变化_【opencv_python学习之三】图像处理(一)更改色彩模式...
  15. 收银员使用的条码扫描枪如何判断好坏?
  16. 智齿徐懿 | 一个“外行”眼中的呼叫中心系统未来
  17. 吉林大学计算机专硕和学硕的区别,在吉林大学在职研究生项目中专硕和学硕的区别是什么...
  18. 第一部android手机,安卓手机诞生十年,第一部Android 一.零手机长这样
  19. explaining and harnessing adversarial examples(FGSM)
  20. MRAM关键工艺步骤

热门文章

  1. groupdel: cannot remove the primary group of user 'lxh1'的解决办法
  2. ps换证件照背景颜色
  3. 空白页删不掉怎么办,wps怎么删除一页?
  4. Python中显示图片
  5. mongodb与mysql优缺点
  6. 未明学院:云计算热门机器学习项目来袭!收割亚马逊、阿里等一众巨头都看重的实操技能与项目经历!
  7. 银行专业术语解释说明 超级详细
  8. 中国有哪些python比赛_有哪些大学生值得参与的竞赛?
  9. 我家遥控器载波波形研究
  10. win10熄屏时间不对_电脑熄屏时间怎么设置win10的