天天看點

[3天速成Spring Security] - 04 Spring Security安全配置簡介HttpSecurity的配置WebSecurity的配置

繼承

WebSecurityConfigurerAdapter

類可以實作安全配置,其中常用的配置内容是

HttpSecurity

WebSecurity

HttpSecurity的配置

代碼實作

  • 繼承

    WebSecurityConfigurerAdapter

    ,重寫

    configure(HttpSecurity)

    方法
  • 執行個體代碼
@Override
protected void configure(HttpSecurity http) throws Exception {
	// TODO...
}
           

代碼分析

  • 檢視方法基類預設實作,當沒有重寫該方法時,此預設配置則會生效
protected void configure(HttpSecurity http) throws Exception {
	this.logger.debug("Using default configure(HttpSecurity). "
				+ "If subclassed this will potentially override subclass configure(HttpSecurity).");
	http.authorizeRequests((requests) -> requests.anyRequest().authenticated()); // 任何請求都會進行認證
	http.formLogin(); // 啟用内建的登入頁面m
	http.httpBasic(); // 使用HTTP Basic Auth進行認證
}
           
  • 如果希望啟用Security的調試功能且輸出日志,則可以給

    @EnableWebSecurity

    (debug=true)

    參數啟用。【預設不啟用】
    [3天速成Spring Security] - 04 Spring Security安全配置簡介HttpSecurity的配置WebSecurity的配置
  • 啟用後則每當有API通路時都可以在控制台看到完整的請求内容【請求資訊,參與的Filter Chain】
    [3天速成Spring Security] - 04 Spring Security安全配置簡介HttpSecurity的配置WebSecurity的配置

配置Security使用者名及密碼

  • 在application.properties中配置登入使用者名,密碼及角色
spring.security.user.name=jack
spring.security.user.password=12345678
spring.security.user.roles=USER,ADMIN
           
  • 配置後,Spring Security就不會再為我們生成随機密碼了

WebSecurity的配置

代碼實作

  • 繼承

    WebSecurityConfigurerAdapter

    ,重寫

    configure(WebSecurity)

    方法
  • 執行個體代碼
@Override
public void configure(WebSecurity web) throws Exception {
	// TODO...
}
           
  • 與HttpSecurity的差別
    • 任何請求進入HttpSecurity configure的方法時都會啟動過濾器鍊,但是啟動過濾器鍊是很昂貴的操作,有時候并不期待經過過濾器鍊。當我們希望有的API不經過過濾器鍊的處理就允許或拒絕時,則需要在HttpSecurity的configure方法中實作。

代碼分析

  • 當希望test開頭的API請求不通過過濾器鍊時可以通過如下配置
@Override
public void configure(WebSecurity web) throws Exception {
	web.ignoring().mvcMatchers("/test/**");
}
           
  • 當使用者通路

    /test/

    開頭的API時,則會直接放行,不會經過過濾器鍊進行安全檢查。通常作用于靜态檔案的路徑等等…