Spring Security之簡單舉例


核心功能

Spring Security提供了三個核心的功能:

認證(你是誰)

授權(你能干什么)

攻擊防護(防止偽造身份)

一個簡單例子

默認情況

在前面的開發中,都是將spring security功能禁用的,現在開啟該功能,即在application.properties文件中把下面這句話注釋掉即可。

# security.basic.enabled=false
# 注:在添加了BrowserSecurityConfig之后,security.basic.enabled這個配置就不管用了

重啟應用會在控制台輸出一個默認密碼,對應的用戶名是user

再訪問http://localhost:8080/user/1時會提示輸入用戶名密碼,默認情況下是httpBasic認證.

自定義認證模式

認證授權相關的代碼寫在各個模塊里,處理瀏覽器相關的代碼寫在imooc-security-browser模塊里。寫在imooc-security-browser模塊里的配置能在demo模塊里起作用,原因是demo中的起動類在com.imooc包下,而BrowserSecurityConfig在com.imooc.security.browser.config包下,注意啟動類和配置類所在的包,要不然配置類會不起作用的

httpBasic登錄,在imooc-security-browser模塊里添加如下配置類,實現了自定義的httpBasic登錄,即默認的認證模式:

@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        System.out.println("BrowserSecurityConfig");
        http.httpBasic() // httpBasic登錄
                .and()
                .authorizeRequests() // 對請求做授權
                .anyRequest() // 任何請求
                .authenticated(); // 都需要身份認證
    }
}

httpForm登錄,下面的代碼是基於表單的登錄:

@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        System.out.println("BrowserSecurityConfig");
        // 寫法一:繼承父類是formLogin登錄
        // super.configure(http);
        
        // 寫法二
        http.formLogin() // 表單登錄
                .and()
                .authorizeRequests() // 對請求做授權
                .anyRequest() // 任何請求
                .authenticated(); // 都需要身份認證
    }
}

基本原理

最核心的東西就是過濾器鏈,綠色過濾器可控制,用來處理表單登錄,其他顏色過濾器不可控制,其中藍色用來處理異常,橙色用來作最終能否訪問的認證,REST API就是我們寫的控制器。

請求到UsernamePasswordAuthenticationFilter,會判斷是否是登錄請求,是的話是否有用戶名和密碼並認證,到FilterSecurityInterceptor時會根據配置判斷請求是否滿足要求(是否已認證或不用認證),如果不滿足就返回登錄讓用戶登錄認證信息。通過在上面幾個控制器打斷點,來分析一下:

啟動應用並訪問http://localhost:8080/user/1,首先會FilterSecurityInterceptor.java,對請求做驗證,判斷沒有認證信息后拋出異常

異常信息被ExceptionTranslationFilter.java過濾器捕獲並重定向到登錄頁面

從控制台復制密碼,並在頁面輸入登錄信息,點擊登錄按鈕

登錄請求被UsernamePasswordAuthenticationFilter.java過濾器攔截,並對用戶信息進行認證

再次被FilterSecurityInterceptor.java攔截器攔截,按F8

最終訪問/user/1對應的控制器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM