shiro的使用

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-09 17:01:05

Subject(主体)

通过安全管理器进行 认证 和授权
SecurityMannager  安全管理器
SecurityMannager  是shiro框架的核心

Authenticator 认证器
    对主体进行认证

Authorizer 授权器
    用户通过认证器认证通过,在访问功能时通过授权器判断用户是否有此功能的操作权限

Realm 
    SecurityMannager  进行安全认证需要通过Realm湖区用户权限数据 Realm 也是一个接口

    Realm:
        从配置文件或者数据库等读取用户的权限信息
    多实现:
        1.将用户的权限信息存储到配置文件
        2.将用户的权限信息存储到数据库

SessionManager  会话管理器
    shiro框架有一套自己的session容器
    shiro可以使用到非wevb项目上的,也可以实现单点登录

SessionDao
    是对session会话操作的一套接口,比如要将会话信息存储到redis数据库

CacheManager 缓存管理器(提高性能)缓存第三方
    防止用户每次或是重复登陆,都需要在数据库获取一次权限信息,所以存放在缓存中
    对于用户反复查询访问自身那个权限的这种操作,便提供了缓存管理器
    第一次访问后将信息放入缓存管理器,在接下来的操作中,直接从缓存中获取用户权限
    
Cryptography
    密码管理器,shiro提供了一套加密/解密的组件,方便开发。比如提供常用的散列,加密解密等功能
    

接下来的使用就是调用方法或类,来完成shiro的操作

搭建maven依赖包

<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core -->
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <version>1.3.2</version>
</dependency>
<!-- ----------------- 用于slf4j 和log4j的一个桥接------------------------- -->
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.12.1</version>
    <scope>test</scope>
</dependency>

slf4j 提供了一个日志访问的统一接口,为各种日志框架提供了统一格式的访问api
日志的门面系统
搭建 配置文件:
    1.shiro配置文件为 .ini   (权限文档)
        [users]
        test=123456,admin
        test1=7891011,public
        [roles]
        admin=product:view,prodcut:create,product:update
        public=product:view
    (格式):test 为用户 ,123456为密码,admin为url权限
                roles:配置admin=权限1,权限2,。。。。 多个权限以逗号隔开

读取配置文件加载框架
---------------------------------------初始化shiro环境只运行一次-----------------------------------------
    1.初始化shiro的安全管理器器,SecurityMannager  
    DefautSecurityMannager   securityMannager  =new DefautSecurityMannager  ();
    2.设置用户的权限信息到安全管理器
    Realm realm=new IniRealm("classpath:shiro.ini")
        //配置好读取权限后交给SecurityMannager  
    securityMannager.setRealm(realm)
    3.使用SecurityUtils将SecurityMannager 设置到运行环境中(shiro框架提供的工具类SecurityUtils)
    SecurityUtils.setSecurityManager(securityManager);
-------------------------------已完成安全管理器------------------------------------------------------
    4.创建需要认证的主题(Subject)
    Subject  subject=SecurityMannager.getSubject();
    5.创建用于认证的的认证器 ,记录用户认证的身份信息和凭证及账号和密码
    UsernamePasswordToken token=new UsernamePasswordToken("test","123456");
    6.主题进行登陆,登陆时及认证检查
    subject.login(token);

    //subject.login(token); 登陆
    //subject.isAuthenticated() 返回布尔值 ,检测用户认证状态
    //subject.hasRole("admin"); 返回布尔值,检查校色授权状态
    //subject.isPermitted("product:view"); 返回布尔,查询登陆者的url是否存在
    //subject.isPermitted("product:view","product:update")[2]; 返回一个数组,查询登陆者多个url是否存在 
    //subject.getPrincipal();返回String 登陆者用户账号
    //subject.logout(); 退出
    
User currentUser = (User) SecurityUtils.getSubject().getPrincipal(); //获取当前用户

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!