Shiro
Posted rain-in-summer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shiro相关的知识,希望对你有一定的参考价值。
Shiro最重要的两个功能为:认证和授权
Shiro是一个Java平台的开源权限框架,用于认证和访问授权。具体来说,满足对如下元素的支持:
- 用户,角色,权限(仅仅是操作权限,数据权限必须与业务需求紧密结合),资源(url)。
- 用户分配角色,角色定义权限。
- 访问授权时支持角色或者权限,并且支持多级的权限定义。
在shiro架构中,有3个最主要的组件:Subject,SecurityManager,Realm。
Subject本质上就是当前访问用户的抽象描述。
SecurityManager是Shiro架构中最核心的组件,通过它可以协调其他组件完成用户认证和授权。实际上,SecurityManager就是Shiro框架的控制器。
Realm定义了访问数据的方式,用来连接不同的数据源,如:LDAP,关系数据库,配置文件等等。
认证流程:
授权流程:
==================================================================================================================
1 最简单的认证授权的代码如下: 2 3 package com.shiro; 4 5 import org.apache.shiro.SecurityUtils; 6 import org.apache.shiro.authc.UsernamePasswordToken; 7 import org.apache.shiro.mgt.DefaultSecurityManager; 8 import org.apache.shiro.mgt.SecurityManager; 9 import org.apache.shiro.realm.SimpleAccountRealm; 10 import org.apache.shiro.subject.Subject; 11 import org.springframework.stereotype.Component; 12 13 /** 14 * description: 15 * author: Wangys 16 * Date: 2018-11-23 17 */ 18 @Component 19 public class ShiroTest { 20 21 SimpleAccountRealm realm = new SimpleAccountRealm(); 22 23 public void setAccount() { 24 realm.addAccount("Summer", "password", "admin"); 25 } 26 27 public void testShiro() { 28 29 // 构建SecurityManager环境 30 DefaultSecurityManager manager = new DefaultSecurityManager(); 31 manager.setRealm(realm); 32 33 // 主体提交认证请求 34 SecurityUtils.setSecurityManager(manager); 35 Subject subject = SecurityUtils.getSubject(); 36 UsernamePasswordToken token = new UsernamePasswordToken("Summer", "password"); 37 38 subject.login(token); 39 // 认证 40 subject.isAuthenticated(); 41 // 授权 42 subject.checkRoles("admin"); 43 } 46 }
下面我们看下认证与授权调用的具体实现方法
授权:hasRoles方法点下去调用的是AuthorizingRealm中的checkRoles()方法
认证调用的是AuthenticatingSecurityManager中的authenticate()方法 ,AuthenticatingSecurityManager继承RealmSecurityManager
继续点击去调用的是ModularRealmAuthenticator中的认证方法
所以认证与授权都是以Realm为主体来实现的。
以上是关于Shiro的主要内容,如果未能解决你的问题,请参考以下文章
springboot配置shiro权限管理,网搜搜采集网站权限控制代码