《Spring Security教程系列》.初識Java 配置

Java配置使用and()方法相當於XML標籤的關閉,這樣允許我們繼續配置父類節點。如果你閱讀代碼他很合理,我想配置請求驗證,並使用表單和HTTP基本身份驗證進行登錄。

Java配置和表單登錄

因此使用Java代碼配置Spring Security主要是這兩個步驟:

1、創建過濾器

2、註冊過濾器。

1.第一步創建過濾器

這段配置創建一個Servlet Filter:springSecurityFilterChain,其負責應用中的所有安全,包括:保護應用的URLS,驗證提交的username和password,重定向到登錄頁面等。通過以下代碼可以看到使用Java配置Spring Security的基礎案例:


@EnableWebSecurity

public class SecurityConfig extends WebSecurityConfigurerAdapter{

@Autowired

public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

auth

.inMemoryAuthentication()

.withUser("user").password("password").roles("USER");

}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

方法名 configureGlobal是無關緊要的,重要的是在一個添加了 @EnableWebSecurity註解的類裏面,注入 AuthenticationManagerBuilder。這段代碼內容很少,但事實上已經做了很多的默認安全驗證,包括:

1、訪問應用中的每個URL都需要進行驗證

2、生成一個登陸表單

3、允許用戶使用username和password來登陸

4、允許用戶註銷

5、CSRF攻擊攔截

6、 Session Fixation攻擊

7、 安全Header集成

1. 1@EnableWebSecurity

當我們在任意一個類上添加了一個註解@EnableWebSecurity,就可以創建一個名爲 springSecurityFilterChain 的Filter。我們是在一個自定義的SecurityConfig類上加了這個註解。SecurityConfig類同時也繼承了WebSecurityConfigurerAdapter類,不過需要注意的是,這個過濾器的創建是通過@EnableWebSecurity完成的,與是否繼承這個類無關.

實現EnableWebSecurity的源碼中加上了@Configuration、@EnableGlobalAuthentication、@Import三個註解,所以使用@EnableWebSecurity就相當於同時加上了這三個註解。

總結: @EnableWebSecurity的作用實際上是,創建一個Spring Bean,Bean的類型是Filter,名字爲springSecurityFilterChain。只要我們保證自定義的SecuirtyConfig類,可以被Spring掃描到,就可以幫助我們創建這個Filter了。

1.2 springSecurityFilterChain 過濾器的類型是什麼

Filter的創建時通過WebSecurity對象的build方法完成的,WebSecurity由WebSecurityConfiguration創建,而WebSecurity的作用是用於創建一個類型爲FilterChainProxy的過濾器,FilterChainProxy是Filter的子類,我們所說的創建一個名字爲springSecurityFilterChain的過濾器,實際上過濾器的具體類型就是FilterChainProxy

2.註冊過濾器

下一步是註冊springSecurityFilterChain。這個可以藉助Spring3.1引入的WebApplicationInitializer完成。SpringSecurity提供了一個基類 AbstractSecurityWebApplicationInitializer來確保 springSecurityFilterChain被註冊。

項目中已經使用了SpringMvc

如果在我們的應用程序中已經使用了Spring,那麼在我們的應用中可能已經有了一個 WebApplicationInitializer來加載我們的配置,如果我們還使用之前的代碼,將會出現一個錯誤。此時我們應該在已經存在的ApplicationContext中註冊Spring Security。例如,如果我們已經使用SpringMvc,那麼我們的代碼應該是如下所示:


import org.springframework.security.web.context.*;

public class SecurityWebApplicationInitializer

        extends AbstractSecurityWebApplicationInitializer {



}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章