【Spring Boot集成Shiro指南】

Spring Boot集成Shiro指南

一、添加Maven依賴

首先,需要在Spring Boot項目的pom.xml文件中添加Shiro相關的依賴。例如:

<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.7.1</version> <!-- 請根據實際需要選擇合適的版本 -->
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

二、配置Shiro

  1. 創建Shiro配置類

    配置Shiro的核心組件,如SecurityManagerShiroFilterFactoryBean。例如:

    @Configuration
    public class ShiroConfig {@Beanpublic ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();shiroFilterFactoryBean.setSecurityManager(securityManager);shiroFilterFactoryBean.setLoginUrl("/login");shiroFilterFactoryBean.setSuccessUrl("/index");shiroFilterFactoryBean.setUnauthorizedUrl("/unauthorized");Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();filterChainDefinitionMap.put("/login", "anon");filterChainDefinitionMap.put("/logout", "logout");filterChainDefinitionMap.put("/static/**", "anon");filterChainDefinitionMap.put("/**", "authc");shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);return shiroFilterFactoryBean;}@Beanpublic DefaultWebSecurityManager securityManager(Realm realm) {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(realm);return securityManager;}@Beanpublic Realm realm() {return new MyRealm();}
    }
    
  2. 配置Shiro的屬性

    application.propertiesapplication.yml文件中配置Shiro的相關屬性,如登錄URL、成功URL、未授權URL等。例如:

    # Shiro配置
    shiro.loginUrl=/login
    shiro.successUrl=/index
    shiro.unauthorizedUrl=/unauthorized
    shiro.filterChainDefinitions=/login=anon,/logout=logout,/static/**=anon,/**=authc
    

    或者在application.yml中:

    shiro:loginUrl: /loginsuccessUrl: /indexunauthorizedUrl: /unauthorizedfilterChainDefinitions: /login=anon,/logout=logout,/static/**=anon,/**=authc
    

三、實現自定義Realm

自定義Realm類用于實現Shiro的認證和授權邏輯。例如:

public class MyRealm extends AuthorizingRealm {@Autowiredprivate UserService userService;@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();User user = (User) principals.getPrimaryPrincipal();authorizationInfo.setRoles(userService.getRoles(user.getUsername()));authorizationInfo.setStringPermissions(userService.getPermissions(user.getUsername()));return authorizationInfo;}@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;String username = usernamePasswordToken.getUsername();User user = userService.getUserByUsername(username);if (user == null) {throw new UnknownAccountException("用戶不存在");}return new SimpleAuthenticationInfo(user, user.getPassword(), getName());}
}

四、處理用戶登錄和注銷

創建一個UserController類,用于處理用戶登錄和注銷的請求。例如:

@Controller
public class UserController {@Autowiredprivate Subject subject;@GetMapping("/login")public String login() {return "login";}@PostMapping("/login")public String login(@RequestParam("username") String username,@RequestParam("password") String password,Model model) {UsernamePasswordToken token = new UsernamePasswordToken(username, password);try {subject.login(token);return "redirect:/index";} catch (AuthenticationException e) {model.addAttribute("error", "用戶名或密碼錯誤");return "login";}}@GetMapping("/logout")public String logout() {subject.logout();return "redirect:/login";}
}

五、其他注意事項

  1. 會話管理:Shiro使用會話來跟蹤用戶的登錄狀態。可以在Shiro配置文件中定義會話管理器(DefaultWebSessionManager),并在Spring Boot中配置它。
  2. 日志和調試:為了更好地理解Shiro的工作原理和排查問題,建議啟用Shiro的日志記錄功能。可以在log4j.propertieslogback.xml中配置日志級別。
  3. 安全性考慮:在生產環境中,確保應用程序遵循最佳安全實踐,例如使用HTTPS、定期更新依賴項、限制訪問權限等。

通過以上步驟,就可以在Spring Boot項目中成功集成Shiro,實現認證和授權功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62780.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62780.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62780.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot使用Nacos進行application.yml配置管理

Nacos是阿里巴巴開源的一個微服務配置管理和服務發現的解決方案。它提供了動態服務發現、配置管理和 服務管理平臺。Nacos的核心功能包括服務發現、配置管理和動態服務管理&#xff0c;使得微服務架構下的服務治理 變得簡單高效。 Nacos的設計基于服務注冊與發現、配置管理、動…

Electron-Vite 項目搭建(Vue)

前提條件 Node.js: 確保已安裝 Node.js 版本 18 或更高版本 (推薦使用最新穩定版)。Vite: 確保 Vite 版本為 4.0 或以上。包管理工具: 推薦使用 pnpm&#xff0c;但也可以使用 npm 或 yarn。 安裝 Electron-Vite 首先&#xff0c;在項目中安裝 electron-vite 作為開發依賴&a…

STM32F103單片機HAL庫串口通信卡死問題解決方法

在上篇文章 STM32F103單片機使用STM32CubeMX創建IAR串口工程 中分享了使用cubeMX直接生成串口代碼的方法&#xff0c;在測試的過程中無意間發現&#xff0c;串口會出現卡死的問題。 當串口一次性發送十幾個數據的時候&#xff0c;串口感覺像卡死了一樣&#xff0c;不再接收數據…

【Neo4J】neo4j docker容器下的備份與恢復

文章目錄 一. 官網說明1. 操作說明2. 注意事項 二. docker 容器化操作1. 導出&#xff08;備份&#xff09;停止容器執行備份 2. 導入&#xff08;恢復&#xff09;停止容器(如果未停止)執行導入 3. 啟動容器 一. 官網說明 https://neo4j.com/docs/operations-manual/current/…

selenium自動爬蟲工具

一、介紹selenium爬蟲工具 selenium 是一個自動化測試工具&#xff0c;可以用來進行 web 自動化測試、爬蟲 selenium 本質是通過驅動瀏覽器&#xff0c;完全模擬瀏覽器的操作&#xff0c;比如跳轉、輸入、點擊、下拉等&#xff0c;來拿到網頁渲染之后的結果&#xff0c;可支持…

Unity開發數字孿生項目

前言&#xff1a;記錄下自己用Unity開發數字孿生項目&#xff0c;所用到的知識點、功能點以及對項目認知總結&#xff0c;當然還有開發過程中所遇到的坑。此篇博客也是會隨時進行更新。 &#x1f60a;屏幕前看到此片文章的開發者們在此類項目開發過程中少走些彎路&#xff0c;希…

node利用路由搭建web實例

npm init npm i express body-parser cookie-parser 封裝web實例 搭建路由 導出web 應用實例注冊

量化交易系統開發-實時行情自動化交易-8.25.真格(澎博財經旗下)平臺

19年創業做過一年的量化交易但沒有成功&#xff0c;作為交易系統的開發人員積累了一些經驗&#xff0c;最近想重新研究交易系統&#xff0c;一邊整理一邊寫出來一些思考供大家參考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下來會對于真格&#xff08;澎博財經…

QT JSON文件解析

參考博客 https://blog.csdn.net/cpp_learner/article/details/118421096 1 打開文件&#xff0c;讀取全部內容 QFile file("../Json/js.json"); if (!file.open(QFile::ReadOnly | QFile::Text)) {qDebug() << "cant open error!";return; }// 讀…

面試常見-Java 原生實現常見數據結構

Java 原生實現常見數據結構 文章目錄 Java 原生實現常見數據結構一、引言二、數組&#xff08;Array&#xff09;&#xff08;一&#xff09;概念&#xff08;二&#xff09;代碼實現 三、鏈表&#xff08;Linked List&#xff09;&#xff08;一&#xff09;概念&#xff08;二…

1. 機器學習基本知識(5)——練習題(參考答案)

20.&#x1f517;本章代碼筆記&#x1f4d3;鏈接&#xff08;需要&#x1fa9c;&#xff09;&#xff1a;&#xff08;01_the_machine_learning_landscape.ipynb - Colab (google.com)&#xff09; 如果你不想通過上面的官方網址下載本章的筆記&#xff0c;還可以在本篇博文的…

通常一個 Xml 映射文件,都會寫一個 Dao 接口與之對應, 請問,這個 Dao 接口的工作原理是什么?Dao 接口里的方法, 參數不同時,方法能重載嗎?

Dao 接口 即 Mapper 接口 。接口 的 全 限 名 &#xff0c;就是 映 射 文 件 中 的 namespace 的值 &#xff1b; 接口 的 方 法 名 &#xff0c; 就 是 映 射 文 件 中 Mapper 的 Statement 的 id 值&#xff1b; 接 口 方 法 內 的 參數 &#xff0c; 就 是 傳 遞 給 sql 的參…

硬件設計 | Altium Designer軟件PCB規則設置

基于Altium Designer&#xff08;24.9.1&#xff09;版本 嘉立創PCB工藝加工能力范圍說明-嘉立創PCB打樣專業工廠-線路板打樣 規則參考-嘉立創 注意事項 1.每次設置完規則參數都要點擊應用保存 2.每次創建PCB&#xff0c;都要設置好參數 3.可以設置默認規則&#xff0c;將…

WebDAV服務不能上傳大文件,文件超過50M報錯[0x800700DF]怎么辦?

這個問題需要分別從服務端和客戶端解決。 1.Windows客戶端 解除50M文件限制&#xff0c;Windows訪問Webdav服務時&#xff0c;大于50M文件提示錯誤[錯誤:0x800700DF] 部署了webdav&#xff0c;Windows10映射網絡磁盤&#xff0c;傳輸文件超過大約50MB的文件會彈出“0x800700…

安全基礎學習-keil調試匯編代碼

初始目的是為了通過匯編編寫CRC功能。 但是基礎為0&#xff0c;所以目前從搭建工程開始記錄。 大佬繞路。 &#xff08;一&#xff09;創建項目 1. 新建項目 打開 Keil uVision。選擇 Project -> New uVision Project 創建一個新項目。選擇你的目標設備&#xff08;如 AR…

安裝qt 5.15.2筆記

撰文是2024年12月 最終實現了 1、用梯子下載了離線包5.14.2&#xff0c;最后沒用 2、用內地鏡像在線安裝5.15.2&#xff0c;3分鐘裝完 正文開始&#xff0c;qt官方簡稱官方。 官方包官方自5.15.X起&#xff0c;不再提供的exe/run安裝包https://download.qt.io/archive/qt/ …

Redis Java 集成到 Spring Boot

Hi~&#xff01;這里是奮斗的明志&#xff0c;很榮幸您能閱讀我的文章&#xff0c;誠請評論指點&#xff0c;歡迎歡迎 ~~ &#x1f331;&#x1f331;個人主頁&#xff1a;奮斗的明志 &#x1f331;&#x1f331;所屬專欄&#xff1a;Redis &#x1f4da;本系列文章為個人學習筆…

【Syncfusion系列】Diagram 雜談 第三篇 序列化和反序列化

目錄 序列化保存C# 代碼示例&#xff0c; 方式1 &#xff1a;C# 代碼示例&#xff0c; 方式2 &#xff1a; 反序列化加載C# 代碼示例, 方式1&#xff1a;C# 代碼示例, 方式2&#xff1a; **如何序列化自定義屬性**序列化和反序列化都存在的一個問題解決方式 圖表是否已修改&…

麒麟信安推出支持信創PC的新一代云桌面方案,助力政務信創高效安全運維

12月11日&#xff0c;在第二屆國家新一代自主安全計算系統產業集群融通生態大會上&#xff0c;麒麟信安發布了支持信創PC的新一代云桌面方案&#xff0c;該方案是基于國際TCI架構實現國產PC機云化納管在國內的首次發布&#xff0c;并與銀河麒麟桌面操作系統、長城國產PC整機實現…

中國科學院2001年數據結構試題

一、單項選擇題(每空2分&#xff0c;共20分) 1&#xff0e;下列函數中漸近時間復雜度最小的是( )。 A&#xff0e;T1(n)nlog2n5000n B&#xff0e;T2(n)n2-8000n C&#xff0e;T3(n)nlog221-6000n D&#xff0e;T4(n)2nlog2n-7000n 2&#xff0e;線性表的靜態鏈表存儲結構與順序…