• 【学习笔记】Shiro安全框架(一)


    Shiro是Apache旗下的开源框架,将软件系统的安全认证相关功能抽取出来,一个功能强大且易于使用的Java安全框架,它执行身份验证、授权、加密和会话管理

    Subject——主体

    外部应用与Subject进行交互,Subject记录了当前操作用户,将用户概念 理解为当前操作的主体,可能是一个通过浏览器请求的用户,也可能是一个运行的程序,Subject在shiro中是一个接口,接口中定义了很多认证授权的方法,外部通过Subject进行认证全收,而Subject是通过SecurityManager安全管理器进行认证授权的

    SecurityManager——安全管理器

    是一个接口,继承了这三个接口:Authenticator、Authorizer、SessionManager

    对全部的Subject进行安全管理,是shiro的核心,负责对所有的Subject进行安全管理。理解SecurityManager可以完成Subject的认证、授权,实质上SecurityManager通过Authenticator进行认证 ,通过 Authorizer进行授权,通过SessionManager进行会话管理

    Authenticator——认证器

    对用户身份进行认证,Authenticator是一个接口,shiro提供ModularRealmAuthenticator实现类,通过ModularRealmAuthenticator基本上可以满足大多数需求,也可以自定义认证器

    Authorizer——授权器

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

    Realm——领域

    相当于DataSource数据源,SecurityManager进行安全认证需要通过Realm获取用户权限数据:比如,用户身份数据在数据库,那么realm需要从数据库中获取用户信息

    SessionManager——会话管理

    依赖web容器的Session,也可应用在非web,也可以将分布式应用的会话集中在一起管理,所以可实现单点登录

    SessionDAO——会话DAO

    对session会话操作的一套接口,比如要将session存储到数据库,可以通过jdbc将会话存储到数据库

    CacheManager——缓存管理

    将用户权限数据存储到缓存,提高性能

    Cryptography——密码管理

    加密/解密组件,方便开发

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.apache.shirogroupId>
    4. <artifactId>shiro-coreartifactId>
    5. <version>1.9.1version>
    6. dependency>
    7. <dependency>
    8. <groupId>org.slf4jgroupId>
    9. <artifactId>slf4j-nopartifactId>
    10. <version>1.7.2version>
    11. dependency>
    12. dependencies>

    shiro.ini配置文件 

    1. [users]
    2. wangtingting=123
    3. yinjinhui=123456
    1. public class TestAuthenticator {
    2. public static void main(String[] args) {
    3. //1.创建安全管理器对象
    4. DefaultSecurityManager securityManager = new DefaultSecurityManager();
    5. //2.给安全管理器设置Realm
    6. securityManager.setRealm(new IniRealm("classpath:shiro.ini"));
    7. //3.SecurityUtils给全局安全工具类设置安全管理器
    8. SecurityUtils.setSecurityManager(securityManager);
    9. //4.关键对象Subject主体
    10. Subject subject = SecurityUtils.getSubject();
    11. //5.创建令牌
    12. UsernamePasswordToken token = new UsernamePasswordToken("wangtingting","123");
    13. try{
    14. System.out.println(subject.isAuthenticated());
    15. subject.login(token);//用户认证
    16. System.out.println(subject.isAuthenticated());
    17. }catch (Exception e){
    18. e.printStackTrace();
    19. }
    20. }
    21. }

    注意:当时直接创建的普通Maven项目,ini配置文件放在resource文件夹中,但是报错说找不到,idea不会自动将新文件或目录及其他资源更新到target目录中,必须在pom.xml中设置

    1. <build>
    2. <resources>
    3. <resource>
    4. <directory>src/main/resourcesdirectory>
    5. <includes>
    6. <include>**/*.*include>
    7. includes>
    8. <filtering>falsefiltering>
    9. resource>
    10. resources>
    11. build>

  • 相关阅读:
    单目标应用:火鹰优化算法(Fire Hawk Optimizer,FHO)求解微电网优化--提供MATLAB代码
    多系统对接的适配与包装模式应用
    信创产业现状、分析与预测
    对于直流电线缆的选型,你真的会吗?—直流电线缆选型规范
    REDIS可视化神器 | REDIS DESK MANAGER(2022.5.1)
    解决Mac终端启动每次都要source ~/.bash_profile才能使adb生效的问题
    Mysql(四)------逻辑库和数据表
    量化:概率统计基础
    web前端工程师面试之路
    基于 KubeSphere 的分级管理实践
  • 原文地址:https://blog.csdn.net/qq_36149079/article/details/126519918