【学习笔记】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——密码管理
加密/解密组件,方便开发
<dependencies> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.9.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-nop</artifactId> <version>1.7.2</version> </dependency> </dependencies>
shiro.ini配置文件
[users] wangtingting=123 yinjinhui=123456
public class TestAuthenticator { public static void main(String[] args) { //1.创建安全管理器对象 DefaultSecurityManager securityManager = new DefaultSecurityManager(); //2.给安全管理器设置Realm securityManager.setRealm(new IniRealm("classpath:shiro.ini")); //3.SecurityUtils给全局安全工具类设置安全管理器 SecurityUtils.setSecurityManager(securityManager); //4.关键对象Subject主体 Subject subject = SecurityUtils.getSubject(); //5.创建令牌 UsernamePasswordToken token = new UsernamePasswordToken("wangtingting","123"); try{ System.out.println(subject.isAuthenticated()); subject.login(token);//用户认证 System.out.println(subject.isAuthenticated()); }catch (Exception e){ e.printStackTrace(); } } }
注意:当时直接创建的普通Maven项目,ini配置文件放在resource文件夹中,但是报错说找不到,idea不会自动将新文件或目录及其他资源更新到target目录中,必须在pom.xml中设置
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> <filtering>false</filtering> </resource> </resources> </build>