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.shirogroupId>
- <artifactId>shiro-coreartifactId>
- <version>1.9.1version>
- dependency>
- <dependency>
- <groupId>org.slf4jgroupId>
- <artifactId>slf4j-nopartifactId>
- <version>1.7.2version>
- 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/resourcesdirectory>
- <includes>
- <include>**/*.*include>
- includes>
- <filtering>falsefiltering>
- resource>
- resources>
- build>