日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Security和多个过滤器链

發(fā)布時間:2023/12/3 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Security和多个过滤器链 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Spring Security是一項非常有用的技術(shù)。 它使您可以保護應(yīng)用程序而不會過于侵入,并允許插入許多不同的身份驗證機制。 另一方面,要使用它并不是那么容易,并且每次接觸它時我都必須重新學(xué)習(xí)這些工具之一。 在這篇文章中,我將介紹Spring安全性的一些基礎(chǔ)知識,以及如何使用它以不同的方式保護應(yīng)用程序的不同部分。

Spring安全配置

讓我們看一下Spring Security的一部分配置,您可以在Github上找到完整的源代碼 。 我正在使用Spring Boot,但是對于所有Spring應(yīng)用程序,大多數(shù)部分應(yīng)該是相同的。

@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .httpBasic() .and() .authorizeRequests().antMatchers( "/secret/**" ).authenticated() .and() .authorizeRequests().antMatchers( "/**" ).permitAll(); } }

在最簡單的情況下,您只需使用Spring Security中常見的方法鏈接來配置HttpSecurity 。 在這種情況下,我們啟用HTTP基本身份驗證,并要求對一個端點進行身份驗證( /secure/以下的所有內(nèi)容)。 允許所有其他請求(以/**表示)。 此處使用的模式是Ant路徑語法,但是您也可以使用不同的RequestMatcher來決定應(yīng)用程序的哪些部分需要哪種身份驗證。

Spring boot的所有功能都在過濾器鏈中實現(xiàn)。 上面對httpBasic()的調(diào)用實際上只是確保將相關(guān)過濾器添加到過濾器鏈中。 在這種情況下, BasicAuthenticationFilter將檢查是否存在一個Authorization標(biāo)頭并對其進行評估。 如果找到一個,它將在上下文中添加一個Authentication對象,并執(zhí)行其余的過濾器鏈。 在該鏈的末尾是FilterSecurityInterceptor ,它檢查所請求的資源是否需要身份驗證,以及所設(shè)置的資源是否符合所請求的角色。

您還可以通過配置WebSecurity將應(yīng)用程序的某些部分從身份驗證中WebSecurity 。 以下方法確保對/resources/所有請求都跳過上面的配置。

@Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers( "/resources/**" ); }

在幕后,這將添加一個附加的過濾器鏈,該過濾器鏈針對配置的路徑觸發(fā),但不執(zhí)行任何操作。

多個過濾鏈

有時可能需要對應(yīng)用程序的不同部分使用不同的身份驗證機制。 為此,Spring Security允??許您添加幾個配置對象。 為此通常使用內(nèi)部配置類,這些內(nèi)部配置類也可以共享封閉應(yīng)用程序的某些部分。 下列類添加了兩個不同的Spring Security過濾器鏈。

public class SecurityConfig { @Configuration public static class ApiConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { // doesn't really make sense to protect a REST API using form login but it is just for illustration http .formLogin() .and() .authorizeRequests().antMatchers( "/secret/**" ).authenticated() .and() .authorizeRequests().antMatchers( "/**" ).permitAll(); } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers( "/resources/**" ); } } @Order ( 1 ) @Configuration public static class ActuatorConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .antMatcher( "/management/**" ) .httpBasic() .and() .authorizeRequests().antMatchers( "/management/**" ).authenticated(); } @Override public void configure(WebSecurity web) throws Exception { super .configure(web); } } }

這兩個類都繼承自適配器配置類,并配置其HttpSecurity 。 這些類中的每一個都添加一個過濾器鏈,并執(zhí)行第一個匹配的鏈。 @Order批注可用于影響過濾器鏈的順序,以確保首先執(zhí)行正確的過濾器鏈。

也可能有必要將過濾器鏈限制為僅應(yīng)用程序的特定部分,以免其他部分觸發(fā)該過濾器鏈。 ActuatorConfiguration被限制為僅將請求匹配到/management/ 。 請注意,配置中有兩個不同的地方可以接受RequestMatcher 。 開頭的一個限制了觸發(fā)過濾鏈的網(wǎng)址。 authorizeRequests()之后的請求用于定義哪些請求需要哪種身份驗證。

請注意,配置WebSecurity并不與HttpSecurity配置之一綁定,因為它們添加了自己的過濾器鏈,只是順序可能有所不同。 如果在兩種配置中都添加了模式,它甚至可以在WebSecurity的同一實例上WebSecurity 。

最后一件事:如果您使用的是自定義身份驗證過濾器(例如,基于令牌的身份驗證),則可能需要注意不要將過濾器也注冊為Servlet過濾器。 您可以通過配置一個返回FilterRegistrationBean的方法并接受Filter的實例來影響它。 只要創(chuàng)建一個新的FilterRegistrationBean為您的過濾器,并設(shè)置enabled以false 。

翻譯自: https://www.javacodegeeks.com/2017/08/spring-security-multiple-filter-chains.html

總結(jié)

以上是生活随笔為你收集整理的Spring Security和多个过滤器链的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。