Shiro基础
Factory<T>接口(org.apache.shiro.util.Factory)
接口的getInstance()方法是泛型方法,可以用来创建SecurityManager接口对象
T |
getInstance() Returns an instance of the required type. |
SecurityManager接口(org.apache.shiro.mgt )
可以保存的所有的认证数据信息
实际上,大多数应用程序程序员不会经常与SecurityManager交互(如果有的话)。大多数应用程序程序员只关心当前执行的用户的安全操作,通常通过调用SecurityUtils.getSubject()来实现。
SecurityUtils类(org.apache.shiro.SecurityUtils)
|
setSecurityManager(SecurityManager securityManager) Sets a VM (static) singleton SecurityManager, specifically for transparent use in the getSubject() implementation. |
应用程序中,通过setSecurityManager把securityManager set进SecurityUtils 然后调用SecurityUtils.getSubject()方法拿到Subject
|
getSubject() Returns the currently accessible Subject available to the calling code depending on runtime environment. |
Subject
A Subject represents state and security operations for a single application user. These operations include authentication (login/logout), authorization (access control), and session access. It is Shiro's primary mechanism for single-user security functionality.
通过SecurityUtils.getSubject()拿到Subject之后 可以通过Subject接口进行登录,授权,认证,等操作。(下面只摘录了一个登录的API接口)
login(AuthenticationToken token) Performs a login attempt for this Subject/user. |
AuthenticationToken
参数token: 身份验证令牌是用户在身份验证尝试期间提交的帐户主体和支持凭证的整合。该令牌通过authenticate(token)方法提交给身份验证者。然后身份验证器执行身份验证/登录过程。
验证令牌的常见实现包括用户名/密码对、X.509证书、PGP密钥或您能想到的任何东西。令牌可以是身份验证器需要的任何东西,以便正确地进行身份验证
下面提供一个简单的DEMO
package com.sun.test; import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory; public class TestLoginDemo {
public static void main(String[] args) {
// 取得Factory接口对象,主要的目的是通过配置文件加载文件之中的信息,这些信息暂时不能够成为认证信息
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
// 取得里面所保存的所有的认证数据信息
org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();
// 利用一个专门的认证操作的处理类,实现认证处理的具体的实现
SecurityUtils.setSecurityManager(securityManager);
// 获取进行用户名和密码认证的接口对象
Subject subject = SecurityUtils.getSubject() ;
// 定义了一个Token,里面保存要登录的用户名和密码信息
UsernamePasswordToken token = new UsernamePasswordToken("admin","hello") ;
// 实现用户登录处理
subject.login(token);
}
}
shiro.ini配置
[users]
admin=hello
Relam (org.apache.shiro.realm.Realm)
上面的权限认证都是在一个配置文件完成的(shiro.ini),如果想实现不同用户数据来源,并且统一这些来源的处理。准备了一个叫Realm的接口
Reaml实现类的授权接口
|
doGetAuthorizationInfo(PrincipalCollection principals) Retrieves the AuthorizationInfo for the given principals from the underlying data store. |
Reaml实现类的认证接口
|
doGetAuthenticationInfo(AuthenticationToken token) Retrieves authentication data from an implementation-specific datasource (RDBMS, LDAP, etc) for the given authentication token. |
介绍完Shiro基础,下面我们讲一讲Shiro在SSM框架的应用(使用Relam)
Shiro基础的更多相关文章
- Shiro 基础教程
原文地址:Shiro 基础教程 博客地址:http://www.extlight.com 一.前言 Apache Shiro 是 Java 的一个安全框架.功能强大,使用简单的Java安全框架,它为开 ...
- Apache Shiro:【1】Shiro基础及Web集成
Apache Shiro:[1]Shiro基础及Web集成 Apache Shiro是什么 Apache Shiro是一个强大且易于使用的Java安全框架,提供了认证.授权.加密.会话管理,与spri ...
- Shiro框架 - 【shiro基础知识】
转载:https://segmentfault.com/a/1190000013875092#articleHeader27 读完需要 63 分钟 前言 本文主要讲解的知识点有以下: 权限管理 ...
- Apache Shiro 快速入门教程,shiro 基础教程 (这篇文章非常好)
第一部分 什么是Apache Shiro 1.什么是 apache shiro : Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理 ...
- Apache Shiro 快速入门教程,shiro 基础教程
第一部分 什么是Apache Shiro 1.什么是 apache shiro : Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理 ...
- 【原】Spring整合Shiro基础搭建[3]
1.前言 上个Shiro Demo基础搭建是基于官方的快速入门版本,没有集成其他框架,只是简单的通过Main方法来执行Shiro工作流程,并测试一下比较核心的函数:但在企业开发中一般都会集成Sprin ...
- Shiro基础知识08----拦截器介绍(转)
1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展:所以如果对Filter不熟悉可以参考<Servlet3.1规范>http://www.iteye.com/b ...
- shiro基础学习(四)—shiro与项目整合
一.认证 1.配置web.xml 2.配置applicationContext.xml 在applicationContext.xml中配置一个bean,ID和上面的过滤器的名称一致. ...
- shiro基础学习(三)—shiro授权
一.入门程序 1.授权流程 2.授权的三种方式 (1)编程式: 通过写if/else 授权代码块完成. Subject subject = SecurityUtils.getSubjec ...
随机推荐
- python3 requestsGET请求传参
GET方式传参方式一: import requests url = 'http://www.baidu.com/s?page=2' # 使用?携带参数 r = requests.get(url) pr ...
- break 和continue在循环中起到的作用
break语句的作用是终止当前循环,跳出循环体.主意,break只能跳出一层循环. continue语句的作用是终止本轮循环并开始下一轮循环,(这里要主意的是在开始下一轮循环之前,会先测试循环条件). ...
- js项目练习第二课
百度输入法 <style> *{ list-style: none; text-decoration: none; padding: 0; margin: 0; } a:hover{ te ...
- python AES加密 ECB PKCS5
class AesEbc16: # 按块的大小, 一块一块的加密, 明文和密文长度一样 def __init__(self): self.key = b"123qweqqqwerqwer& ...
- 非WifI环境处理
//1.创建网络状态监测管理者 AFNetworkReachabilityManager *mangerStatus = [AFNetworkReachabilityManager sharedMan ...
- Numpy 矩阵库(Matrix)
Numpy 中包含了一个矩阵库 numpy.matlib, 该模块中的函数返回的是一个矩阵, 而不是 ndarray 对象. 一个 m * n de 矩阵是一个 有 m 行(row) n 列(colu ...
- 分享一个14年写的用户管理类-swift版
AccountManager类 14年设计,从swift 0.9开始,迭代到现在swift4.0版本,总体几乎没什么改动,简单稳定. 其实现的思路主要还是借助之前net反射的经验,实现了自动保存用户信 ...
- python3中 tkinter模块创建window窗体、添加按钮、事务处理、创建菜单等的使用
开始接触桌面图形界面编程,你可以到安装路径 \lib\tkinter 打开__init__.py 文件了解tkinter 1 tkinter 模块创建窗体,代码如下截图: 运行结果,如有右图显 ...
- 20155312 张竞予 Exp3 免杀原理与实践
Exp3 免杀原理与实践 目录 基础问题回答 (1)杀软是如何检测出恶意代码的? (2)免杀是做什么? (3)免杀的基本方法有哪些? 实验总结与体会 实践过程记录 正确使用msf编码器,msfveno ...
- ThinkPhp5 出现访问出现 No input file specified. 问题
今天复习一下ThinkPhp5,在官网下载了核心版,windows下配置了虚拟域名之后出现了神奇的现象 如下图 直接访问域名能访问到index模块下的index控制器下的index方法 但是我输入完整 ...