Shiro权限控制从入门到实战

453 阅读2分钟

1、Shiro概述

Shiro是apache旗下一个开源安全框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。使用shiro就可以非常快速的完成认证、授权等功能的开发,降低系统成本。

image.png

2、Shiro核心三大组件

其中:

  1. Subject :主体对象,负责提交用户认证和授权信息。
  2. SecurityManager:安全管理器,负责认证,授权等业务实现。
  3. Realm:领域对象,负责从数据层获取业务数据。

3、Shiro详细架构

image.png 其中:

Subject(主体):与软件交互的一个特定的实体(用户、第三方服务等)。

SecurityManager(安全管理器) :Shiro 的核心,用来协调管理组件工作。

Authenticator(认证管理器):负责执行认证操作。

Authorizer(授权管理器):负责授权检测。

SessionManager(会话管理):负责创建并管理用户 Session 生命周期,提供一个强有力的 Session 体验。

SessionDAO:代表 SessionManager 执行 Session 持久(CRUD)动作,它允许任何存储的数据挂接到 session 管理基础上。

CacheManager(缓存管理器):提供创建缓存实例和管理缓存生命周期的功能。

Cryptography(加密管理器):提供了加密方式的设计及管理。

Realms(领域对象):是shiro和你的应用程序安全数据之间的桥梁。

4、Shiro之授权管理与授权的三种方式

4.1、编程方式

Subject currentUser = SecurityUtils.getSubject();
if (currentUser.hasRole("administrator")) {
//拥有角色administrator
} else {
//没有角色处理
}

4.2、注解方式

注解 意义 案例
@RequiresAuthentication 验证用户是否登录\ @RequiresUser 当前用户已经验证过了或则记住我了\ @RequiresGuest 是否是游客身份
@RequiresRoles 判断subject中有aRoleName角色才可以访问方法someMethod @RequiresRoles({“admin”})
@RequiresPermissions 需要拥有权限 @RequiresPermissions({“file:read”, “write:aFile.txt”} ) /**

  • 创建日期:2017/12/20
  • 创建时间:17:21:33
  • 创建用户:yellowcong
  • 机能概要: */
    @Service("shiroService") public class ShiroService { @RequiresRoles({"admin"}) public void test() { System.out.println("执行了程序"); } }

4.3、jsp标签

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%--shiro 标签 --%> <%@taglib prefix="shiro" uri="shiro.apache.org/tags" %>

后台管理 - yellowcong

<shiro:hasRole name="admin"> 管理员
</shiro:hasRole>

<shiro:hasRole name="user"> 普通用户
</shiro:hasRole>

退出