SpringBoot - 第四十一章 | Apache Shiro 安全控制
不得不說這篇拖的時間有點長,一方面是因為在確認文章的後期要再繼續寫什麼,二方面是這個Shiro我花了點時間研究。
這邊文章中使用到的有mysql、jpa、thymeleaf、shiro,如果不太清楚這些的使用方式,可以參考下面這些文章。
Docker - 第四章 | 安裝MySQL
SpringBoot - 第十四章 | Spring-data-jpa訪問資料庫
SpringBoot - 第四章 | Web開發(Thymeleaf)
環境準備
- Docker 資料庫準備
- CREATE DATABASE test;
相關配置
加入pom的依賴
1
2
3
4
5<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency>src/main/resources/application.properties中配置資料源訊息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28# 資料源配置
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 顯示SQL語法
spring.jpa.show-sql=true
# format SQL語法
spring.jpa.properties.hibernate.format_sql=true
# 顯示SQL語法的查詢條件的值
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
# 自動建立(此參數請小心使用)
# validate 加載hibernate時,驗證建立資料庫表結構
# create 每次加載hibernate,重新建立資料庫表結構,這就是導致資料庫表資料丟失的原因。
# create-drop 加載hibernate時建立,退出是刪除表結構
# update 加載hibernate自動更新資料庫結構
# validate 啟動時驗證表的結構,不會建立表
# none 啟動時不做任何操作
spring.jpa.properties.hibernate.hbm2ddl.auto=update
# 建議在開發時關閉緩存,不然沒法看到實時頁面
spring.thymeleaf.cache=false
# 去除thymeleaf的html嚴格校驗
spring.thymeleaf.mode=LEGACYHTML5
spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的配置屬性,其主要作用是:自動建立、更新、驗證資料庫表結構。參數說明可以參考這篇文章連結
建立實體 (Entity)
- User(用戶表)、Role(角色表)、Menu(功能表)
建立資料訪問對象 (Dao)
建立ShiroConfig
建立MyShiroRealm
建立LoginController
建立.html
- index、login、select、delete、403
測試用SQL
1 | INSERT INTO `test`.`menu`(`menu_id`, `menu_name`) VALUES (1, 'add'); |
測試
啟動應用並瀏覽 http://localhost:8080/
因為還沒有登入的情況下,所以被導到login頁面
登入後,就會導回到當初的頁面index
按下登出後回到login頁
輸入錯誤密碼登入
確認是否有select權限,瀏覽 http://localhost:8080/select ,並登入,見到select,表示有權限
確認是否有delete權限,瀏覽 http://localhost:8080/delete ,並登入,見到delete,表示有權限
註:以上參考了
Apache Shiro | Simple. Java. Security.
Dalaoyang 的 使用shiro安全管理 文章。
Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】
springboot整合shiro应用