Spring Security之簡單舉例

核心功能

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

認證(你是誰)spring

受權(你能幹什麼)瀏覽器

攻擊防禦(防止僞造身份)app

一個簡單例子

默認狀況

在前面的開發中,都是將spring security功能禁用的,如今開啓該功能,即在application.properties文件中把下面這句話註釋掉便可。ide

# security.basic.enabled=false
# 注:在添加了BrowserSecurityConfig以後,security.basic.enabled這個配置就無論用了

重啓應用會在控制檯輸出一個默認密碼,對應的用戶名是user3d

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

自定義認證模式

認證受權相關的代碼寫在各個模塊裏,處理瀏覽器相關的代碼寫在imooc-security-browser模塊裏。寫在imooc-security-browser模塊裏的配置能在demo模塊裏起做用,緣由是demo中的起動類在com.imooc包下,而BrowserSecurityConfig在com.imooc.security.browser.config包下,注意啓動類和配置類所在的包,要否則配置類會不起做用的orm

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

@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對應的控制器

相關文章
相關標籤/搜索