_013_Shiro_Permissions

• 授权,也叫访问控制,即在应用中控制谁访问哪些资源(如访问页面/编辑数据/页面操作
等)。在授权中需了解的几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)、角色(Role)。

• 主体(Subject):访问应用的用户,在 Shiro 中使用 Subject 代表该用户。用户只有授权
后才允许访问相应的资源。

• 资源(Resource):在应用中用户可以访问的 URL,比如访问 JSP 页面、查看/编辑某些
数据、访问某个业务方法、打印文本等等都是资源。用户只要授权后才能访问。

• 权限(Permission):安全策略中的原子授权单位,通过权限我们可以表示在应用中用户
有没有操作某个资源的权力。即权限表示在应用中用户能不能访问某个资源,如:访问用
户列表页面查看/新增/修改/删除用户数据(即很多时候都是CRUD(增查改删)式权限控
制)等。权限代表了用户有没有操作某个资源的权利,即反映在某个资源上的操作允不允
许。

• Shiro 支持粗粒度权限(如用户模块的所有权限)和细粒度权限(操作某个用户的权限,
即实例级别的)

• 角色(Role):权限的集合,一般情况下会赋予用户角色而不是权限,即这样用户可以拥有
一组权限,赋予权限时比较方便。典型的如:项目经理、技术总监、CTO、开发工程师等
都是角色,不同的角色拥有一组不同的权限。

• Shiro 支持三种方式的授权:
(1)  编程式:通过写if/else 授权代码块完成
(2)  注解式:通过在执行的Java方法上放置相应的注解完成,没有权限将抛出相应的异常
(3)  JSP/GSP 标签:在JSP/GSP 页面通过相应的标签完成

默认拦截器 

 (1)  Shiro 内置了很多默认的拦截器,比如身份验证、授权等相关的。默认拦截器可以参考org.apache.shiro.web.filter.mgt.DefaultFilter中的枚举拦截器:

 (2)  身份验证相关

扫描二维码关注公众号,回复: 5468996 查看本文章

(3)  授权相关

 

Permissions

 

 Shiro的Permissions

 

 授权流程

 

 

 

	/*授权会被调用的方法*/
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		System.out.println("[ShiroRealm]  doGetAuthorizationInfo...");
		/*1  从PrincipalCollection 中获取登录用户的信息*/
		Object primaryPrincipal = principals.getPrimaryPrincipal();
		/*2  利用登陆的用户信息来获取当前用户的角色或权限,可能需要查询数据库*/
		Set<String> roles=new HashSet<>();
		roles.add("user");
		if("admin".equals(primaryPrincipal)) {
			roles.add("admin");
		}
		/*3  创建 SimpleAuthorizationInfo,并设置其roles属性。*/
		SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo(roles);
		/*4  返回 SImpleAuthoriztionInfo实体*/
		
		return simpleAuthorizationInfo;
	}

猜你喜欢

转载自blog.csdn.net/poiuyppp/article/details/86598733
013