一、前言
Java有两个出名的安全框架,一个是Apache Shiro,另一个是Spring Security ,相对而言Shiro更简单、控制权限的粒度可粗可细,我们项目中使用的是Shiro。
二、概念
Shiro最主要的功能是验证用户身份和用户访问权限控制,比如判断用户是否分配了一个角色,或判断用户是否有完成某个操作的权限等。它不会去维护用户与权限,这需要我们自己提供接口然后注入给Shiro。
1、三大核心组件
-
subject
主体,可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证、授权。
-
securityManager:
安全管理器,主体进行认证和授权都是通过它进行。
-
realm
领域,可以理解为DAO,通过它存取认证、授权相关数据。
2、四大核心功能
-
Authentication
认证即登录,用于用户身份识别。
-
Authorization
授权即访问控制,判断用户是否有权限去访问受保护的资源。
-
Cryptography
通过加密算法保护数据安全。
-
Session Management
会话管理,即用户访问你应用自身携带的数据,甚至可以在非Web程序上使用。
三、最简单例子
1、build.gradle
2、AuthenticationTest.java
Shiro认证过程
1、调用subject.login(token)进行登录,其会委托给SessionManager,调用之前必须通过
SecurityUtils.setSecurityManager进行设置。
2、SecurityManager负责真正身份验证逻辑,它会委托给Authenticator进行身份验证。
3、Authenticator是真正的身份验证者。
DelegatingSubject.java
DefaultSecurityManager.java
AbstractAuthenticator.java