shiro 角色与权限的解读

1、为什么 shiro 有了《角色》后,还要设置《角色权限》呢?(问题)

思考:设置好角色了,那么就代表什么操作都可以执行了吗?
理解:如果上边回答是的话,那么只是《角色》层次的控制。
举例:如果你是个老师,那么你就可以教学生数学课,但是现实呢,是个老师就能教数学课吗?体育老师、美术老师...路过;所以:角色权限就是用来指定这个角色可以做哪些操作。换句话说角色就是某些权限的集合。比如学校里面校长,老师,学生,等角色,但是他们都有不同的职业,这就是权限。如果只有角色没有权限,那角色就没有意义了。
值的一提的是,《角色》 跟 《角色权限》 都是用来控制用户访问权限的,如果项目中只是需要用到 《角色》来限制用户访问,
那么,角色权限就没什么用了,所以,《角色权限》更像是《角色》更加细化后的操作,比如上边学校老师、校长、学生那个例子;

2、代码小例子

   /*** 权限认证*/  @Override  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {  //1、获取登录时输入的用户名  String loginName=(String) principalCollection.fromRealm(getName()).iterator().next();  //2、到数据库查是否有此对象  User user=userService.findByName(loginName);  if(user!=null){  //2.1、权限信息对象info,用来存放查出的用户的所有的角色(role)及权限(permission)  SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();  //2.2、用户的角色集合  
            info.addRoles(user.getRolesName());  //2.3、用户的角色对应的所有权限,如果只使用角色定义访问权限,下面的四行可以不要  List<Role> roleList=user.getRoleList();  for (Role role : roleList) {  info.addStringPermissions(role.getPermissionsName());  }  return info;  }  return null;  }  
 上边代码截取的自定义 AuthorizingRealm 中 doGetAuthenticationInfo 方法;
 
    结合上方代码,举两个例子。
 
    一、角色控制
 
           场景:只允许(admin)登录角色显示
    jsp 代码<shiro:hasRole name="manager">manager角色登录显示此内容</shiro:hasRole>  <shiro:hasRole name="admin">admin角色登录显示此内容</shiro:hasRole>
代码:上边 2.2 步骤,用户角色设置中,如果给该用户 “admin”权限,那么在 jsp 中就能显示出第一条来。
   info.addRoles("admin");  
二、权限控制
 
            场景:只允许拥有 (add)权限的用户显示
   jsp 代码<shiro:hasPermission name="add">add权限用户显示此内容</shiro:hasPermission>  <shiro:hasPermission name="edit">edit权限用户显示此内容</shiro:hasPermission>  
代码:上边 2.3 步骤,用户角色权限设置中,如果给该用户角色设置 “add”权限,那么在 jsp 中就能显示出第一条来。
    info.addStringPermissions("add"); 

3、补充

  关于 shiro 《角色》与《权限》相信你大概有一点概念了,下一篇会总结一下关于 shiro 常用注解,以及注解使用场景。

博客地址:http://www.cnblogs.com/niceyoo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android添加Header请求参数实例,java响应header请求实现demo

1、首先添加AsyncHttpClient.jar包到libs文件夹下 2、初始化请求类以及响应回调类 private AsyncHttpClient client; private AsyncHttpResponseHandler asyncHttpResponseHandler; 3、网络权限 <!-- 网络链接 --> <uses-permission android:name"android.perm…

代码整洁之道pdf

下载地址&#xff1a;网盘下载内容简介 《代码整洁之道(英文版)》提出一种观念&#xff1a;代码质量与其整洁度成正比。干净的代码&#xff0c;既在质量上较为可靠&#xff0c;也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者&#xff0c;《代码整洁之道(英文版)…

苹果 ios 微信浏览器界面 ajax 提交带 file 的 form 总是走error方法

1. 问题 问题出在微信端&#xff0c;而且是苹果机的微信端(苹果你咋这么矫情&#xff0c;安卓正常).&#xff1b;代码还是之前的代码&#xff0c;貌似是苹果升级系统后部分版本出现的 BUG&#xff0c;后来证明确实跟 ios 版本有关&#xff0c;网上也找过类似的解决措施&#xf…

前端学习(2748):uniapp创建项目和演示

1创建项目 2运行项目 3配置在微信小程序注意 配置路径 4注意开启端口号

HttpServletResponse.getWriter().print乱码,request.getHeader乱码,解决方法

1、添加响应类型即可 //这句话的意思&#xff0c;是让浏览器用utf8来解析返回的数据 response.setHeader("Content-type", "text/html;charsetUTF-8"); 添加前后&#xff1a; 如果是header参数乱码&#xff0c;解决方法如下&#xff1a; HTTP H…

设计图与html 对比

简易打开旧版火狐 网页版火狐添加组件 新版有时也会没有 谷歌是腾讯的转载于:https://www.cnblogs.com/byksj/p/8426291.html

jsr-303 参数校验-学习(转)

1、是什么&#xff1f; JSR303 是一套 JavaBean 参数校验的标准&#xff0c;它定义了很多常用的校验注解&#xff0c;比如&#xff1a;------------------------------------------------- NotNull(message"名字不能为空") private String userName; Max(value90,mes…

URLEncoder 、URLDecoder 对中文转码解码使用

URLEncoder 、URLDecoder 转码解码使用 传递参数&#xff0c;转码传递 String encodeStr null; try { encodeStr URLEncoder.encode("aabb22中国", "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.pr…

SQLServer DBA 三十问(加强版)

SQLServer DBA 三十问&#xff08;加强版&#xff09; 原文链接&#xff1a;http://www.cnblogs.com/fygh/p/3288701.html距离最初发布SQLServer DBA 三十问 已有一年多了&#xff0c;大家对其中的某些问题讨论比较激烈&#xff0c;要回答出来这些问题需要比较扎实的SQLServer …

jsr-303 参数校验—自定义校验注解

1、为什么要自定义&#xff1f; 通过上篇学习&#xff0c;了解到很多常用注解了&#xff0c;但是呢&#xff0c;总是有那么些需求....2、案例分析(手机号格式) 2.1、需要验证的实体 Bean public class LoginVo {NotNullIsMobile //自定义的注解private String mobile;NotNullLe…

关于Apache Tomcat解决localhost was unable to start within 45 seconds

关于重装myeclipse启动服务超时问题解决方法&#xff1a; 1.打开安装或解压了Tomcat的根目录 &#xff08;1&#xff09;temp&#xff08;项目临时缓存文件&#xff09; 里面的文件全部删除&#xff0c;不要犹豫&#xff0c;这是之前在对项目进行操作的时候&#xff0c;所产生…

[译]SQL SERVER 2016 – Temporal Tables

原文 Temporal Table是SQL Server2016的新特性。能存储你表里面任意时间点的数据信息。 换句话说&#xff0c;如果你针对一张表执行任何更新或者删除操作&#xff0c;老数据会被新数据覆盖&#xff0c;下次查询的时候是查的最新的数据&#xff0c;但如果使用了temporal table你…

拦截器、过滤器、@Aspect 区别

1、需求场景 之前也有在文章写道 “拦截器\过滤器" 的区别&#xff0c;文章链接&#xff0c;在实际开发过程中&#xff0c;我们可能会遇到拦截请求参数的需求&#xff0c;在这我举个场景。某一个接口的请求参数都是加密的&#xff0c;而请求参中还有一些跟业务无关的数据&…

工作231:给input动态赋值

这个应该是不可以的&#xff0c;必须重新使用用文件对话框选择。 这是处于安全的考虑&#xff0c;不能直接对input typefile的类型赋值&#xff0c;因为直接用JS就可以将你本地文件直接取到指定地点&#xff0c;就没有安全性可言。 因此必须对一个input typefile设置一个按钮来…

MyEclipse2015Stable2.0安装破解

java开发者不可避免需要使用到的开发工具——myeclipse2015。下载安装直接打开使用的话&#xff0c;使用期为30天&#xff0c;之后如果没有注册吗注册&#xff0c;就使用不了了。即使卸载重装还是提示试用期期限超限&#xff0c;无法打开使用。 于是就有了破解myeclipse2015方…

laravel5.5中间件

目录 1. 中间件知识1. artisan 命令2. 文件内容3. 前置中间件和后置中间件4. 使用中间件2. 控制器中间件1. 中间件知识 1. artisan 命令 php artisan make:middleware CheckAge 2. 文件内容 <?phpnamespace App\Http\Middleware;use Closure;class CheckAge {public functi…

JAVA spring 常用包作用详解(转)

转载地址&#xff1a;https://www.cnblogs.com/Tmc-Blog/p/6093162.html <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http:…