成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

SpringSecurity核心配置有哪些-創(chuàng)新互聯(lián)

這篇文章主要講解了“Spring Security核心配置有哪些”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spring Security核心配置有哪些”吧!

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),薩迦企業(yè)網(wǎng)站建設(shè),薩迦品牌網(wǎng)站建設(shè),網(wǎng)站定制,薩迦網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,薩迦網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

核心配置解讀

3.1 功能介紹

這是Spring Security入門指南中的配置項:

@Configuration@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {  @Override  protected void configure(HttpSecurity http) throws Exception {      http          .authorizeRequests()              .antMatchers("/", "/home").permitAll()              .anyRequest().authenticated()              .and()          .formLogin()              .loginPage("/login")              .permitAll()              .and()          .logout()              .permitAll();  }  @Autowired  public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {      auth          .inMemoryAuthentication()              .withUser("admin").password("admin").roles("USER");  }}

當配置了上述的javaconfig之后,我們的應用便具備了如下的功能:

  • 除了“/”,"/home"(首頁),"/login"(登錄),"/logout"(注銷),之外,其他路徑都需要認證。

  • 指定“/login”該路徑為登錄頁面,當未認證的用戶嘗試訪問任何受保護的資源時,都會跳轉(zhuǎn)到“/login”。

  • 默認指定“/logout”為注銷頁面

  • 配置一個內(nèi)存中的用戶認證器,使用admin/admin作為用戶名和密碼,具有USER角色

  • 防止CSRF攻擊

  • Session Fixation protection(可以參考我之前講解Spring Session的文章,防止別人篡改sessionId)

  • Security Header(添加一系列和Header相關(guān)的控制)

    • HTTP Strict Transport Security for secure requests

    • 集成X-Content-Type-Options

    • 緩存控制

    • 集成X-XSS-Protection

    • X-Frame-Options integration to help prevent Clickjacking(iframe被默認禁止使用)

  • 為Servlet API集成了如下的幾個方法

    • HttpServletRequest#getRemoteUser()

    • HttpServletRequest.html#getUserPrincipal()

    • HttpServletRequest.html#isUserInRole(java.lang.String)

    • HttpServletRequest.html#login(java.lang.String, java.lang.String)

    • HttpServletRequest.html#logout()

3.2 @EnableWebSecurity

我們自己定義的配置類WebSecurityConfig加上了@EnableWebSecurity注解,同時繼承了WebSecurityConfigurerAdapter。你可能會在想誰的作用大一點,毫無疑問@EnableWebSecurity起到?jīng)Q定性的配置作用,它其實是個組合注解。

@Import({ WebSecurityConfiguration.class, //       SpringWebMvcImportSelector.class }) // @EnableGlobalAuthentication // @Configurationpublic @interface EnableWebSecurity {   boolean debug() default false;}

@Import是springboot提供的用于引入外部的配置的注解,可以理解為:@EnableWebSecurity注解激活了@Import注解中包含的配置類。

@Import(AuthenticationConfiguration.class)@Configurationpublic @interface EnableGlobalAuthentication {}

注意點同樣在@Import之中,它實際上激活了AuthenticationConfiguration這樣的一個配置類,用來配置認證相關(guān)的核心類。

也就是說:@EnableWebSecurity完成的工作便是加載了WebSecurityConfiguration,AuthenticationConfiguration這兩個核心配置類,也就此將spring security的職責劃分為了配置安全信息,配置認證信息兩部分。

WebSecurityConfiguration

在這個配置類中,有一個非常重要的Bean被注冊了。

@Configurationpublic class WebSecurityConfiguration {    //DEFAULT_FILTER_NAME = "springSecurityFilterChain"    @Bean(name = AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME)    public Filter springSecurityFilterChain() throws Exception {        ...    } }

在未使用springboot之前,大多數(shù)人都應該對“springSecurityFilterChain”這個名詞不會陌生,他是spring security的核心過濾器,是整個認證的入口。在曾經(jīng)的XML配置中,想要啟用spring security,需要在web.xml中進行如下配置:

                springSecurityFilterChain        org.springframework.web.filter.DelegatingFilterProxy                springSecurityFilterChain        /*

而在springboot集成之后,這樣的XML被java配置取代。WebSecurityConfiguration中完成了聲明springSecurityFilterChain的作用,并且最終交給DelegatingFilterProxy這個代理類,負責攔截請求(注意DelegatingFilterProxy這個類不是spring security包中的,而是存在于web包中,spring使用了代理模式來實現(xiàn)安全過濾的解耦)。

AuthenticationConfiguration
@Configuration@Import(ObjectPostProcessorConfiguration.class)public class AuthenticationConfiguration {      @Bean    public AuthenticationManagerBuilder authenticationManagerBuilder(            ObjectPostProcessor objectPostProcessor) {        return new AuthenticationManagerBuilder(objectPostProcessor);    }      public AuthenticationManager getAuthenticationManager() throws Exception {        ...    }}

AuthenticationConfiguration的主要任務(wù),便是負責生成全局的身份認證管理者AuthenticationManager。還記得在《Spring Security(一)--Architecture Overview》中,介紹了Spring Security的認證體系,AuthenticationManager便是最核心的身份認證管理器。

3.3 WebSecurityConfigurerAdapter

適配器模式在spring中被廣泛的使用,在配置中使用Adapter的好處便是,我們可以選擇性的配置想要修改的那一部分配置,而不用覆蓋其他不相關(guān)的配置。WebSecurityConfigurerAdapter中我們可以選擇自己想要修改的內(nèi)容,來進行重寫,而其提供了三個configure重載方法,是我們主要關(guān)心的:

Spring Security核心配置有哪些

由參數(shù)就可以知道,分別是對AuthenticationManagerBuilder,WebSecurity,HttpSecurity進行個性化的配置。

HttpSecurity常用配置
@Configuration@EnableWebSecuritypublic class CustomWebSecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http            .authorizeRequests()                .antMatchers("/resources/**", "/signup", "/about").permitAll()                .antMatchers("/admin/**").hasRole("ADMIN")                .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")                .anyRequest().authenticated()                .and()            .formLogin()                .usernameParameter("username")                .passwordParameter("password")                .failureForwardUrl("/login?error")                .loginPage("/login")                .permitAll()                .and()            .logout()                .logoutUrl("/logout")                .logoutSuccessUrl("/index")                .permitAll()                .and()            .httpBasic()                .disable();    }}

上述是一個使用Java Configuration配置HttpSecurity的典型配置,其中http作為根開始配置,每一個and()對應了一個模塊的配置(等同于xml配置中的結(jié)束標簽),并且and()返回了HttpSecurity本身,于是可以連續(xù)進行配置。他們配置的含義也非常容易通過變量本身來推測,

  • authorizeRequests()配置路徑攔截,表明路徑訪問所對應的權(quán)限,角色,認證信息。

  • formLogin()對應表單認證相關(guān)的配置

  • logout()對應了注銷相關(guān)的配置

  • httpBasic()可以配置basic登錄

  • etc

他們分別代表了http請求相關(guān)的安全配置,這些配置項無一例外的返回了Configurer類,而所有的http相關(guān)配置可以通過查看HttpSecurity的主要方法得知:

Spring Security核心配置有哪些

需要對http協(xié)議有一定的了解才能完全掌握所有的配置,不過,springboot和spring security的自動配置已經(jīng)足夠使用了。其中每一項Configurer(e.g.FormLoginConfigurer,CsrfConfigurer)都是HttpConfigurer的細化配置項。

WebSecurityBuilder
@Configuration@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {    @Override    public void configure(WebSecurity web) throws Exception {        web            .ignoring()            .antMatchers("/resources/**");    }}

以筆者的經(jīng)驗,這個配置中并不會出現(xiàn)太多的配置信息。

AuthenticationManagerBuilder
@Configuration@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(AuthenticationManagerBuilder auth) throws Exception {        auth            .inMemoryAuthentication()            .withUser("admin").password("admin").roles("USER");    }}

想要在WebSecurityConfigurerAdapter中進行認證相關(guān)的配置,可以使用configure(AuthenticationManagerBuilder auth)暴露一個AuthenticationManager的建造器:AuthenticationManagerBuilder 。如上所示,我們便完成了內(nèi)存中用戶的配置。

細心的朋友會發(fā)現(xiàn),在前面的文章中我們配置內(nèi)存中的用戶時,似乎不是這么配置的,而是:

@Configuration@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {    @Autowired    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {        auth            .inMemoryAuthentication()                .withUser("admin").password("admin").roles("USER");    }}

如果你的應用只有唯一一個WebSecurityConfigurerAdapter,那么他們之間的差距可以被忽略,從方法名可以看出兩者的區(qū)別:使用@Autowired注入的AuthenticationManagerBuilder是全局的身份認證器,作用域可以跨越多個WebSecurityConfigurerAdapter,以及影響到基于Method的安全控制;而 protectedconfigure()的方式則類似于一個匿名內(nèi)部類,它的作用域局限于一個WebSecurityConfigurerAdapter內(nèi)部。

感謝各位的閱讀,以上就是“Spring Security核心配置有哪些”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Spring Security核心配置有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

網(wǎng)頁標題:SpringSecurity核心配置有哪些-創(chuàng)新互聯(lián)
URL標題:http://jinyejixie.com/article2/dcgcic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、微信公眾號服務(wù)器托管、網(wǎng)站改版網(wǎng)站內(nèi)鏈、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司
云和县| 璧山县| 肥城市| 磐石市| 南汇区| 泸溪县| 紫云| 伊金霍洛旗| 中卫市| 将乐县| 永定县| 冷水江市| 平罗县| 遵义市| 红河县| 怀集县| 诏安县| 乌拉特后旗| 鄂托克旗| 永新县| 斗六市| 蓬莱市| 灵台县| 岱山县| 申扎县| 荃湾区| 淄博市| 资源县| 满城县| 庄河市| 张家界市| 临江市| 闽清县| 台江县| 普安县| 和平区| 翁牛特旗| 松原市| 平遥县| 新和县| 大方县|