[经验分享] apache-shiro安全框架入门

[复制链接]   查看: 260|回复: 0
慢节奏 发表于 2017-8-24 17:11:17 | 显示全部楼层 |阅读模式
一、shiro介绍

1 什么是shiro


shiro是apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权


spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单


shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro


使用shiro实现系统 的权限管理,有效提高开发效率,从而降低开发成本


2 shiro架构
20170824170650.png
shiro支持多种语言,C++, Java, PHP


shiro能应用到b/s, c/s 架构的系统里面


Security Manager,安全管理器,使用shiro框架的入口。shiro框架里面SecurityManager接口


Authenticator,起认证作用。例如:用户(帐号,密码)


Authorizer,起授权作用。例如:授予权限, 就能够知道用户能不能访问资源


Realms,它是shiro中数据库,因为这里面保存了用户以及他的权限


SessionManager,管理多个Session,理解成多个服务中Session


Session DAO,读取Session过程


Cache Manager, shiro自身得到缓存, 搭配缓存框架


Crypography,密钥,加密用户的密码。。。。


3 shiro三大核心组件


Subject:主体,我们理解成需要认证的用户或是程序


SecurityManager:主体的认证和授权都有它来进行


Realm:域,领域,相当于数据源,通过realm存取认证、授权相关数据


4 Authenticator组件


认证器,主体进行认证最终通过authenticator进行的


用户登录需要进行身份的认证,检验用户身份的安全性


5 Authorizer组件


授权器,主体进行授权最终通过authorizer进行的


6 shiro 的jar包
20170824170722.png
shiro-core.jar


shiro-web.jar


shiro-spring.jar


shiro-ehcache.jar


shiro-quartz.jar


二、 shiro入门程序


shiro认证


shiro授权


shiro整合WEB开发


1 shiro认证流程
20170824170757.png
2 第一个shiro程序


2.1导入shiro的相关包
2.1.png
2.2 配置log4j.properties
  1. log4j.rootLogger=debug, stdout

  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m %n
复制代码

2.3 搭建认证的package包
2.3.png
2.4 创建一个认证的测试类


创建shiro的配置文件,shiro-first.ini,在Eclipse中ini后缀的文件名称会默认通过window的记事本打开,所以需要在Eclipse中配置一个ini的文件关联方式
  1. # 对用户信息进行配置
  2. # 包含用户帐号和密码的对应关系
  3. [users]
  4. zhangsan=1111
  5. lisi=222
复制代码
2.5.png
初始化SecurityManager的工厂,但是SecurityManager工厂的对象需要通过加载shiro的ini文件来初始化
  1. package com.shiro.autentication;

  2. import org.apache.shiro.SecurityUtils;
  3. import org.apache.shiro.authc.UsernamePasswordToken;
  4. import org.apache.shiro.config.IniSecurityManagerFactory;
  5. import org.apache.shiro.mgt.SecurityManager;
  6. import org.apache.shiro.subject.Subject;
  7. import org.apache.shiro.util.Factory;
  8. import org.junit.Test;

  9. public class AuthenticationTest {
  10.        
  11.         /**
  12.          * 测试认证的登录与退出
  13.          * 1.加载shiro的配置
  14.          * 2.初始化SecuriyManager的工厂
  15.          * 3.初始化SecurityManager对象
  16.          * 4.将创建好的SecurityManager对象设置到运行环境中
  17.          * 5.构建Subject对象
  18.          * 6.执行认证的提交,但是前提条件需要认证的令牌
  19.          */
  20.         @Test
  21.         public void m01() {
  22.                 Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-first.ini");
  23.                 SecurityManager securityManager = factory.getInstance();
  24.                 SecurityUtils.setSecurityManager(securityManager);
  25.                 Subject subject = SecurityUtils.getSubject();
  26.                
  27.                 //创建认证令牌,相当于工作中的工作牌来表示主体的身份
  28.                 UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("zhangsan", "123");
  29.                 subject.login(usernamePasswordToken);
  30.                
  31.                 boolean isAuthenticated = subject.isAuthenticated();
  32.                 System.out.println("是否认证通过:" + isAuthenticated);
  33.                
  34.                 //认证退出
  35.                 subject.logout();
  36.                 isAuthenticated = subject.isAuthenticated();
  37.                 System.out.println("是否认证通过:" + isAuthenticated);
  38.         }
  39. }
复制代码

2.5 shiro认证执行原理


通过ini配置文件创建SecurityManager


调用subject.login方法主体提交认证,提交的token


securityManager进行认证,securityManager最终由ModularRealmAuthenticator进行认证。


ModularRealmAuthenticator调用IniRealm(给realm传入token) 去ini配置文件中查询用户信息


IniRealm根据输入的token(UsernamePasswordToken)从 shiro-first.ini查询用户信息,根据账号查询用户信息(账号和密码)

人生得意须尽欢,就让傻逼去心酸。
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright;  ©2015-2017  知了堂学习社区  Powered by  知了堂Edu!     ( 蜀ICP备16011312号-1 )