天天看点

Shiro权限管理表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例

Shiro权限管理

  • 表的设计
  • 引入pom包
  • 三大核心组件
  • shiro的运行过程
  • 自定义Realm
  • 配置Shiroconfig
  • Shiro四种权限控制方式
  • 登录实例

shiro是一个安全框架 使用shiro可以非常容易开发出足够好的应用,可以帮助我们完成:认证 授权 加密 会话管理 与web集成 缓存

表的设计

Shiro权限管理表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例

引入pom包

Shiro权限管理表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例

三大核心组件

*Subject:即”当前操作用户“,但在shiro中不仅仅指人还指第三方进程 后台账户 或其他类似事物。仅仅意味着”当前跟软件交互的东西“。

*SecurityManager:是shiro框架的核心 ,用来管理内部组件实例 提供安全管理的各种服务。

*Realm:充当Shiro与应用安全数据间的”桥梁“或者连接器。当用户执行认证(登录)和授权(访问控制)时,shiro会从应用配置的realm中查找用户及其权限信息。

shiro的运行过程

  • 程序员自己编写的代码 在程序中需要进行权限控制 需要调用Subject的API
    Shiro权限管理表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例

    Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;即一个抽象概念;所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者;

    SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject;可以看出它是Shiro的核心,它负责与后边介绍的其他组件进行交互,如果学习过SpringMVC,你可以把它看成DispatcherServlet前端控制器;

    Realm:域,Shiro从从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。

自定义Realm

public class ShiroRealm extends AuthorizingRealm{

}

1、ShiroRealm父类AuthorizingRealm将获取Subject相关信息分成两步:获取身份验证信息(doGetAuthenticationInfo)及授权信息(doGetAuthorizationInfo);

2、doGetAuthenticationInfo获取身份验证相关信息:首先根据传入的用户名获取User信息;然后如果user为空,那么抛出没找到帐号异常UnknownAccountException;如果user找到但锁定了抛出锁定异常LockedAccountException;最后生成AuthenticationInfo信息,交给间接父类AuthenticatingRealm使用CredentialsMatcher进行判断密码是否匹配,如果不匹配将抛出密码错误异常IncorrectCredentialsException;另外如果密码重试此处太多将抛出超出重试次数异常ExcessiveAttemptsException;在组装SimpleAuthenticationInfo信息时,需要传入:身份信息(用户名)、凭据(密文密码)、盐(username+salt),CredentialsMatcher使用盐加密传入的明文密码和此处的密文密码进行匹配。

执行时机:

当调用Subject currentUser = SecurityUtils.getSubject();

currentUser.login(token);

3、doGetAuthorizationInfo获取授权信息:PrincipalCollection是一个身份集合,因为我们现在就一个Realm,所以直接调用getPrimaryPrincipal得到之前传入的用户名即可;然后根据用户名调用UserService接口获取角色及权限信息。

执行时机:

1、subject.hasRole(“admin”) 或 subject.isPermitted(“admin”):自己去调用这个是否有什么角色或者是否有什么权限的时候;

2、@RequiresRoles(“admin”)或@RequiresPermissions(“role:allotResource”) :在方法上加注解的时候;

3、[@shiro.hasPermission name = “admin”][/@shiro.hasPermission]:在页面上加shiro标签的时候,即进这个页面的时候扫描到有这个标签的时候。

Shiro权限管理表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例

配置Shiroconfig

Shiro权限管理表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例
Shiro权限管理表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例
Shiro权限管理表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例

Shiro四种权限控制方式

1.url级别权限控制

Shiro权限管理表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例

2.方法注解权限控制

Shiro权限管理表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例

3.页面标签权限控制

Shiro权限管理表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例

4.代码级别权限控制

Shiro权限管理表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例

登录实例

Shiro权限管理表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例

继续阅读