Apache Shiro 是一个功能强大且易于使用的Java安全框架,它执行身份验证、授权、加密和会话管理。通过Shiro易于理解的API,您可以快速、轻松地保护任何应用程序——从最小的移动应用程序到最大的web和企业应用程序。
什么是Apache Shiro?
Apache Shiro是一个功能强大且易于使用的Java安全框架,它为开发人员提供了一种直观而全面的身份验证、授权、加密和会话管理解决方案。
Apache Shiro能做什么?
SecurityManager
AuthenticationToken:该接口时Shiro的身份验证系统用来表示提交的主体和凭据的基本接口
Authenticator
ModularRealmAuthenticator:
AuthenticationInfo
AuthenticationStrategy
收集主题的主体和证书
//Example using most common scenario of username/password pair:
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
//"Remember Me" built-in:
token.setRememberMe(true);
提交主体和凭据
Subject currentUser = SecurityUtils.getSubject();
currentUser.login(token);
subject.isAuthenticated()
处理成功或失败
如果认证通过什么也不返回。
如果认证失败将会抛出异常。
try {
currentUser.login(token);
} catch ( UnknownAccountException uae ) { ...
} catch ( IncorrectCredentialsException ice ) { ...
} catch ( LockedAccountException lae ) { ...
} catch ( ExcessiveAttemptsException eae ) { ...
} ... catch your own ...
} catch ( AuthenticationException ae ) {
//unexpected error?
}
注销
currentUser.logout(); //removes all identifying information and invalidates their session too.
认证顺序
image.png- 应用程序代码调用Subject.login方法,并传入AuthenticationToken表示最终用户的主体和凭据的构造示例。
AuthenticationStrategy3种具体的认证策略
- 一个认证成功,则认证成功
- 第一个认证成功,则认证成功
- 全部认证成功,则认证成功
Shiro有三个主要的概念
image.pngSecurityManager包括
- Authentication:身份验证
- Authorization:授权
- Session Management:会话管理
- Cache Management:缓存管理
- Realm coordination:领域的协调
- Event propagation:事件传播
- “Remember Me” Services:“记住我”服务
- Subject creation:主题创建
- Logout and more.:注销等等。
默认会话管理器
DefaultSessionManager
会话监听器
默认过滤器
DefaultFilter
WEB环境默认会话管理器
ServletContainerSessionManager
Shiro本地会话管理器
DefaultWebSessionManager
默认使用SimpleCookie
设置
拆除
未经检验的成功
测试未加盐的错误密码
测试未加盐的多行
测试盐柱是否成功
测试base64编码的盐柱成功
测试盐栏密码错误
测试base64盐列密码错误
外部测试成功
测试外部错误的密码
测试的角色出现
测试角色不存在
测试允许存在
测试许可不存在
EnvironmentLoaderListener
初始化Shiro的WebEnvironment示例(其中包含Shiro需要操作的所有东西,包括SecurityManager)
IniWebEnvironment类期望读取和加载INI配置文件。默认情况下,这个类会自动在以下两个位置查找shiro.ini配置(按顺序):
获取WebEnvironment示例
WebUtils.getRequiredWebEnvironment(servletContext)
网友评论