Shiro的四大核心功能 也称为“Shiro应用程序的四大基石”:
1.Authentication:有时也简称为“登录”(身份验证)
这是一个证明用户是他们所说的他们是谁的行为。
2.Authorization:访问控制的过程,也就是绝对“谁”去访问“什么”,即授权。
3.Session Management:会话管理:
管理用户特定的会话,即使在非 Web 或 EJB 应用程序,在后面会详解。
4.Cryptography:通过使用加密算法保持数据安全。
1.Web Support: Shiro 的 web 支持的 API 能够轻松地帮助保护 Web 应用程序。
2.Caching: 缓存是 Apache Shiro 中的第一层公民,来确保安全操作快速而又高效。
3.Concurrency: Apache Shiro 利用它的并发特性来支持多线程应用程序。
4.Testing: 测试支持的存在来帮助你编写单元测试和集成测试,并确保你的能够如预期的一样安全。
5.“Run As”: 一个允许用户假设为另一个用户身份(如果允许)的功能,有时候在管理脚本很有用。
6.“Remember Me”: 在会话中记住用户的身份,所以他们只需要在强制时候登录。
第一步都是拿到验证的主体。这个主体的定义参照:
Subject 是一个安全术语,它基本上的意思是
“当前正在执行的用户的特定的安全视图”。它并没有被称为"User"是因为"User"一词通常和人类相关联。在安全 界,术语"Subject"可以表示为人类,而且可以是第三方进程,cron job,daemon account,或其他类似的东西。它仅仅意味着“该事物目前正与软件交互”。对于大多数的意图和目的,你可以把 Subject 看成是 Shiro 的"User"概念
/*获取验证的主体*/
Subject subject = SecurityUtils.getSubject();
/*获取Session*/
Session session = subject.getSession();
if(!subject.isAuthenticated()){ //验证通过
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("username","password");
/*设置记住账号*/
usernamePasswordToken.setRememberMe(true);
/*登录方法*/
subject.login(usernamePasswordToken);
}
/*退出登录*/
subject.logout();
注意:Session在Shiro中是一个特定的实例,在web环境下等同于HttpSession;非Web环境下一样可以使用,使用范围也不在像HttpSession,局限于web层。
subject.login(usernamePasswordToken); 可能抛出上述异常,对于这些异常要进行捕捉,同时进行处理。
常见的异常:
AuthenticationException包含以下子类:
- CredentitalsException 凭证异常
IncorrentCredentialsException 不正确的凭证
ExpiredCredentialsException 凭证过期
- AccountException 账号异常
ConcurrentAccessException 并发访问异常(多个用户同时登录时抛出)
UnknownAccountException 未知的账号
ExcessiveAttemptsException 认证次数超过限制
DisabledAccountException 禁用的账号
LockedAccountException 账号被锁定
UnsupportedTokenException 使用了不支持的Token
Handy Hint
最安全的做法是给普通的登录失败消息给用户,因为你当然不想帮助试图闯入你系统的攻击者。
1.UnknownAccountException 未知的账号
提示信息:账号不存在,或者账号密码不一致
2.IncorrentCredentialsException 密码错误
3.LockedAccountException 账号被锁定
最近在做一个Spring boot 博客系统,权限控制采用Shiro框架,后面功能完善了,会发布我的github,希望给读者有些帮助。
高级运用参见下一版: