Shiro
39. Shiro概述 apache shiro Java的安全框架 轻量级 spring中有spring security,但是过于依赖spring,没有shiro使用简单 权限管理实现用户访问系统的控制 用户可以访问而且只能访问自己被授权的资源 只要有用户和密码的系统,权限管理几乎都会出现 权限管理分为 登录认证:对于需要访问控制的资源用,首先经过身份认证 判断一个用户是否为合法用户的处理过程. 授权:认证通过用户具有资源的访问权限-方可访问 控制能够访问哪些资源 shrio概述 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。 使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。 40. Shiro核心概念 核心类: Authentication(认证) 身份认证/登录,验证用户是否拥有相应身份 Authorization(授权) 授权,即授权验证,验证某个已认证用户是否拥有某个权限 前两个是重点 Session Manager 会话管理,用户登录后就是一次会话,没有退出前,所有信息都在会话里 Cryptography 加密,保护数据安全 Web Support Web支持,可以非常容易的集成到web环境 Caching 缓存,比如用户登录后,其用户信息,拥有权限/角色不用每次检查,提高效率 Concurrency shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去. Testing 提供测试支持 Run As 允许一个用户假装另外一个用户(如果他们允许)的身份进行访问 Remember Me 记住我,这个是非常常见的功能,即一次登录后,下次再来不用登录了 主要概念: Subject: 当前的操作用户:可以是人,爬虫,当前跟软件交互的东西 在shiro当中我们可以统称"用户" 在代码的任何地方,你都能轻易的获取shiro Subject. 一旦获取subject,你就可以立即获得你希望用shiro为当前用户做的90%的事情 SecurityManager: SecurityManager则管理所有用户的安全操作 引用了多个内部嵌套安全组件,是shiro框架的核心 你可以把它看成DispatcherServlet前端控制器(springmvc) 用于调度各种shiro框架的服务 Realms: realms则是用户的信息认证器和用户的权限认证器 执行认证(登录)和授权(访问控制)时,shiro会从应用配置的realm中查找很多内容 realm可以理解为读取用户信息,角色及权限的DAO SecurityManager要验证用户身份和权限,那么它需要从Realm获取相应的信息进行比较以确定用户身份是否合法 可以将Realm看成dateSource,即安全数据源. Shiro框架: subject主体: 主体可以是程序,主体要访问系统,系统需要对主体进行认证,授权 securityManager安全管理器: authenticator认证器: authorizer授权器: sessionManager会话管理 sessionDao: cacheManager缓存管理器 realm领域 cryptography密码管理: 41. Shiro工程依赖添加 什么是认证: 身份认证,就是判断一个用户是否为合法用户的处理过程 通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确 关键对象: subject主体 用户 Principal 身份信息 是主体Subject进行身份认证的标识,标识必须具有唯一性,如用户名,手机号,邮箱地址等 credential 凭证信息 是只有主体自己知道的安全信息,如密码,证书等. 使用ini完成认证: 1.在Maven中添加依赖jar包 2.添加shiro.ini配置文件 3.登录与退出 创建一个shiro项目 maven quickstart 添加shiro相关依赖 <!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.4.0</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>1.7.24</version> </dependency> 添加ini文件 [users] itlike=1234 my=1234 42. shiro认证 public static void main( String[] args ) { /*1.构建securityManager工厂 ini 加载配置*/ IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini"); /*2.通过工厂创建securityManager*/ SecurityManager securityManager = factory.getInstance(); /*3.将securityManager设置到运行环境中*/ SecurityUtils.setSecurityManager(securityManager); /*4.创建一个Subject实例*/ Subject subject = SecurityUtils.getSubject(); /*5.创建token令牌*/ UsernamePasswordToken token = new UsernamePasswordToken("itlike", "1234"); /*6.用户登录*/ try { subject.login(token); }catch (UnknownAccountException e) { System.out.println("账号不存在"); e.printStackTrace(); }catch (IncorrectCredentialsException e){ System.out.println("密码错误"); e.printStackTrace(); } /*如果成功为true,反之为false*/ System.out.println("是否认证成功"+subject.isAuthenticated()); /*7.用户退出*/ subject.logout(); System.out.println("是否认证成功"+subject.isAuthenticated()); } 43 Shiro认证流程源码分析
39.Shiro概述apache shiro Java的安全框架 轻量级spring中有spring security,但是过于依赖spring,没有shiro使用简单权限管理实现用户访问系统的控制用户可以访问而且只能访问自己被授权的资源只要有用户和密码的系统,权限管理几乎都会出现
权限管理分为登录认证:对于需要访问控制的资源用,首先经过身份认证判断一个用户是否为合法用户的处理过程.
授权:认证通过用户具有资源的访问权限-方可访问控制能够访问哪些资源
shrio概述Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
40.Shiro核心概念核心类:Authentication(认证)身份认证/登录,验证用户是否拥有相应身份Authorization(授权)授权,即授权验证,验证某个已认证用户是否拥有某个权限前两个是重点Session Manager会话管理,用户登录后就是一次会话,没有退出前,所有信息都在会话里Cryptography加密,保护数据安全Web SupportWeb支持,可以非常容易的集成到web环境Caching缓存,比如用户登录后,其用户信息,拥有权限/角色不用每次检查,提高效率Concurrencyshiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去.Testing提供测试支持Run As允许一个用户假装另外一个用户(如果他们允许)的身份进行访问Remember Me记住我,这个是非常常见的功能,即一次登录后,下次再来不用登录了
主要概念:Subject:当前的操作用户:可以是人,爬虫,当前跟软件交互的东西在shiro当中我们可以统称"用户"在代码的任何地方,你都能轻易的获取shiro Subject.一旦获取subject,你就可以立即获得你希望用shiro为当前用户做的90%的事情
SecurityManager:SecurityManager则管理所有用户的安全操作引用了多个内部嵌套安全组件,是shiro框架的核心你可以把它看成DispatcherServlet前端控制器(springmvc)用于调度各种shiro框架的服务
Realms:realms则是用户的信息认证器和用户的权限认证器执行认证(登录)和授权(访问控制)时,shiro会从应用配置的realm中查找很多内容realm可以理解为读取用户信息,角色及权限的DAOSecurityManager要验证用户身份和权限,那么它需要从Realm获取相应的信息进行比较以确定用户身份是否合法可以将Realm看成dateSource,即安全数据源.
Shiro框架:
subject主体:主体可以是程序,主体要访问系统,系统需要对主体进行认证,授权securityManager安全管理器:authenticator认证器:authorizer授权器:sessionManager会话管理sessionDao:cacheManager缓存管理器realm领域cryptography密码管理:
41.Shiro工程依赖添加什么是认证:身份认证,就是判断一个用户是否为合法用户的处理过程通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确
关键对象:subject主体 用户Principal 身份信息是主体Subject进行身份认证的标识,标识必须具有唯一性,如用户名,手机号,邮箱地址等credential 凭证信息是只有主体自己知道的安全信息,如密码,证书等.
使用ini完成认证:1.在Maven中添加依赖jar包2.添加shiro.ini配置文件3.登录与退出
创建一个shiro项目 maven quickstart添加shiro相关依赖 <!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.4.0</version> </dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency>
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>1.7.24</version> </dependency>
添加ini文件[users] itlike=1234my=1234
42.shiro认证 public static void main( String[] args ) { /*1.构建securityManager工厂 ini 加载配置*/ IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini"); /*2.通过工厂创建securityManager*/ SecurityManager securityManager = factory.getInstance(); /*3.将securityManager设置到运行环境中*/ SecurityUtils.setSecurityManager(securityManager); /*4.创建一个Subject实例*/ Subject subject = SecurityUtils.getSubject(); /*5.创建token令牌*/ UsernamePasswordToken token = new UsernamePasswordToken("itlike", "1234"); /*6.用户登录*/ try { subject.login(token); }catch (UnknownAccountException e) { System.out.println("账号不存在"); e.printStackTrace(); }catch (IncorrectCredentialsException e){ System.out.println("密码错误"); e.printStackTrace(); } /*如果成功为true,反之为false*/ System.out.println("是否认证成功"+subject.isAuthenticated()); /*7.用户退出*/ subject.logout(); System.out.println("是否认证成功"+subject.isAuthenticated()); }
43Shiro认证流程源码分析