目錄
Spring Security簡介:
實驗環境搭建:
認證和授權
權限控制和注銷
Spring Security簡介:
Spring Security 是針對Spring專案的安全框架,也是Spring Boot底層安全模塊默認的技術選型,它可以實作強大的Web安全控制,對于安全控制,我們只需要引入 spring-boot-starter-security 模塊,進行少量的配置,即可實作強大的安全管理!
記住幾個類:
-
WebSecurityConfigurerAdapter:自定義Security策略
-
AuthenticationManagerBuilder:自定義認證策略
-
@EnableWebSecurity:開啟WebSecurity模式
Spring Security的兩個主要目標是 “認證” 和 “授權”(訪問控制),
“認證”(Authentication)
身份驗證是關于驗證您的憑據,如用戶名/用戶ID和密碼,以驗證您的身份,
身份驗證通常通過用戶名和密碼完成,有時與身份驗證因素結合使用,
“授權” (Authorization)
授權發生在系統成功驗證您的身份后,最侄訓授予您訪問資源(如資訊,檔案,資料庫,資金,位置,幾乎任何內容)的完全權限,
這個概念是通用的,而不是只在Spring Security 中存在,
Spring Security 框架對于認證和授權很好的支持,在用戶認證方面,Spring Security 框架支持主流的認證方式,包括 HTTP 基本認證、HTTP 表單驗證、HTTP 摘要認證、OpenID 和 LDAP 等,在用戶授權方面,Spring Security 提供了基于角色的訪問控制和訪問控制串列(Access Control List,ACL),可以對應用中的領域物件進行細粒度的控制,
下面是spring security官網:Spring Security 找到對應的官方檔案:Spring Security Reference

實驗環境搭建:
1.新建一個初始的springboot專案web模塊,thymeleaf模塊
2.匯入靜態資源

3、controller跳轉!

4、測驗實驗環境是否成功
認證和授權
我們測驗的環境,是誰都可以訪問,現在我們使用 Spring Security 增加上認證和授權的功能
1、引入 Spring Security 模塊
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2、撰寫 Spring Security 配置類
參考對應的官方檔案:Spring Security Reference

3、撰寫基礎配置類
@EnableWebSecurity // 開啟WebSecurity模式
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
}
}
4.定義授權的規則:
在配置類中看授權的原始碼:


5、測驗,發現除了首頁都進不去了!因為我們目前沒有登錄的角色,因為請求需要登錄的角色擁有對應的權限才可以!
6、在configure()方法中加入以下配置,開啟自動配置的登錄功能!
從原始碼解釋中看

// 開啟自動配置的登錄功能
// /login 請求來到登錄頁
// /login?error 重定向到這里表示登錄失敗
http.formLogin();
7、測驗一下:發現,沒有權限的時候,會跳轉到登錄的頁面!

8、查看剛才登錄頁的注釋資訊;
我們可以定義認證規則,從原始碼中查看

重寫configure(AuthenticationManagerBuilder auth)方法
//定義認證規則
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//在記憶體中定義,也可以在jdbc中去拿....
auth.inMemoryAuthentication()
.withUser("kuangshen").password("123456").roles("vip2","vip3")
.and()
.withUser("root").password("123456").roles("vip1","vip2","vip3")
.and()
.withUser("guest").password("123456").roles("vip1","vip2");
}
9、測驗,我們可以使用這些賬號登錄進行測驗!發現會報錯!
There is no PasswordEncoder mapped for the id “null”
10、原因,我們要將前端傳過來的密碼進行某種方式加密,否則就無法登錄,修改代碼

11、測驗,登錄成功,并且每個角色只能訪問自己認證下的規則
權限控制和注銷
1、開啟自動配置的注銷的功能

2、在前端,增加一個注銷的按鈕,index.html 導航欄中
<a class="item" th:href="@{/logout}">
<i class="sign-out icon"></i> 注銷
</a>
3、可以去測驗一下,登錄成功后點擊注銷,發現注銷完畢會跳轉到登錄頁面!
4、但是,我們想讓他注銷成功后,依舊可以跳轉到首頁,該怎么處理呢?
// .logoutSuccessUrl("/"); 注銷成功來到首頁
http.logout().logoutSuccessUrl("/");
5、測驗,注銷完畢后,發現跳轉到首頁OK
6、現在來一個需求:用戶沒有登錄的時候,導航欄上只顯示登錄按鈕,用戶登錄之后,導航欄可以顯示登錄的用戶資訊及注銷按鈕!還有就是,比如longdi這個用戶,它只有 vip2,vip3功能,那么登錄則只顯示這兩個功能,而vip1的功能選單不顯示!這個就是真實的網站情況了!
我們需要結合thymeleaf中的一些功能
sec:authorize="isAuthenticated()":是否認證登錄!來顯示不同的頁面
Maven依賴:
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
<version>3.0.4.RELEASE</version>
</dependency>
7、修改我們的 前端頁面
匯入命名空間 xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"
修改導航欄,增加認證判斷
8、重啟測驗,可以登錄試試看,登錄成功后確實,顯示了我們想要的頁面;
9、如果注銷404了,就是因為它默認防止csrf跨站請求偽造,因為會產生安全問題,可以將請求改為post表單提交,或者在spring security中關閉csrf功能;試試在 配置中增加

10、繼續將下面的角色功能塊認證完成!測驗成功!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/308912.html
標籤:其他
