Apache Shiro 是一個(gè)強(qiáng)大且易用的 Java 安全框架,用于實(shí)現(xiàn)身份驗(yàn)證、授權(quán)、加密和會(huì)話管理。以下是使用 Shiro 框架實(shí)現(xiàn)用戶認(rèn)證的步驟:
在 Maven 項(xiàng)目的 pom.xml 文件中添加 Shiro 依賴:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.7.1</version>
</dependency>
創(chuàng)建一個(gè) Shiro 配置類,用于設(shè)置 Shiro 的相關(guān)配置。
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
public class ShiroConfig {
public static void main(String[] args) {
// 創(chuàng)建 SecurityManager 工廠,通過 ini 配置文件創(chuàng)建 SecurityManager
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
// 獲取 SecurityManager 實(shí)例
SecurityManager securityManager = factory.getInstance();
// 將 SecurityManager 設(shè)置到當(dāng)前運(yùn)行環(huán)境中
SecurityUtils.setSecurityManager(securityManager);
// 獲取當(dāng)前用戶
Subject currentUser = SecurityUtils.getSubject();
// 創(chuàng)建用戶名/密碼身份驗(yàn)證 Token(即用戶身份/憑證)
UsernamePasswordToken token = new UsernamePasswordToken("username", "password");
try {
// 登錄,即身份驗(yàn)證
currentUser.login(token);
System.out.println("登錄成功");
} catch (Exception e) {
System.out.println("登錄失敗");
e.printStackTrace();
}
// 登出
currentUser.logout();
}
}
在項(xiàng)目的 resources
目錄下創(chuàng)建 shiro.ini
配置文件,用于配置用戶、角色和權(quán)限。
[users]
username=password
[roles]
admin=user,admin
[urls]
/admin/** = authc, roles[admin]
/user/** = authc, roles[user]
在這個(gè)例子中,我們創(chuàng)建了一個(gè)用戶 “username”,其密碼為 “password”。我們還定義了一個(gè)角色 “admin”,具有 “user” 和 “admin” 權(quán)限。最后,我們配置了 URL 規(guī)則,以便在訪問特定 URL 時(shí)進(jìn)行身份驗(yàn)證和授權(quán)檢查。
運(yùn)行 ShiroConfig
類的 main
方法,如果用戶名和密碼正確,將看到 “登錄成功” 的輸出。如果用戶名或密碼錯(cuò)誤,將看到 “登錄失敗” 的輸出。
這就是使用 Apache Shiro 框架實(shí)現(xiàn)用戶認(rèn)證的基本過程。您還可以根據(jù)需要擴(kuò)展 Shiro,例如實(shí)現(xiàn)更復(fù)雜的權(quán)限控制、密碼加密等。