導航:首頁 > 凈水問答 > spring過濾器網頁訪問許可權控制

spring過濾器網頁訪問許可權控制

發布時間:2024-08-21 01:56:19

A. springMvc+shiro做許可權管理,頁面上的靜態資源,樣式圖片等沒有出現,用幾種方式過濾試過,還是不行

正常情況是不會出現這樣的,shiro對於靜態資源的處理,不用特殊配置。

只需要在shiroFilter過濾器filterChainDefinitions項中增加一個靜態資源處理規則就可以,例如允許/css/開頭的資源匿名訪問,只需要這樣一句配置就足矣。

/css/** = anon

配置完成後,未登錄就可以在瀏覽器中直接訪問css下的資源,新項目用的shiro,簡單而又實用的許可權框架。

B. SpringBoot系列:4.session和鑒權—過濾器和攔截器

本文主要介紹下,SpringBoot的web項目中,

使用redis保存並共享session,可以實現集群內的登錄信息共享。SpringBoot項目中,通過在 application.yml 增加redis的配置,即可實現對session的存儲和修改。

那麼session是在何時被處理的?session的key又是如何生成的呢?這里實際使用了web項目中的過濾器。

在SpringBoot的web項目中,啟動的tomcat在處理http請求時,有一個很重要的類: ApplicationFilterChain 。每個http請求在處理時都會通過這個類。這個類負責按順序處理全部已注冊的 Filter ,也就是過濾器。通過實現tomcat中的 Filter 介面,就可以定義一個過濾器。

在SpringBoot中的web項目中,有幾個默認的過濾器,其中一個就是用來處理session的: SessionRepositoryFilter

SessionRepositoryFilter 主要的成員是兩個介面,都有多個可選的實現類,通過這兩個成員就實現了對session的解析。

當然也可以實現一個自己的過濾器,主要有兩種方式:

下面我們使用第一種方式實現一個限制指定IP的過濾器:

通過過濾器解析session後,就可以根據session中保存的內容,判斷當前登錄的用戶許可權。

這里是通過一個攔截器實現的,在攔截器中可以直接通過 HttpServletRequest.getSession() 方法直接獲取session的信息。

一個簡單的攔截器實現如下:

定義之後要注冊到處理流程中:

先來看下過濾器和攔截器的執行順序,通過debug得到的執行順序如下圖:

在大部分場景中,過濾器和攔截器都是可互換的,使用哪個都可以。

過濾器和攔截器也有些區別,這里不談實現和規范的差異,就說下使用中可能涉及的區別:

最後對於過濾器和攔截器的應用場景,說下個人的總結。基於執行順序,方法參數和SpringBoot中的一些實現類來看。

以上內容屬個人學習總結,如有不當之處,歡迎在評論中指正

C. Spring Security源碼(一):認證、授權、過濾器鏈

因為看了很多博客,發現很多人的使用風格都不一樣,有點懵。感覺最好的方法就是多看一些源碼,然後自己選擇想要的使用方式。
spring security版本:2.1.6.RELEASE

這里先講這三種的關系
AuthenticationManager、ProviderManager、AuthenticationProvider

封裝了用戶身份信息

一個介面,只有一個方法

ProviderManager是AuthenticationManager的實現類,提供了基本認證實現邏輯和流程;
先看這個方法這個方法,是 用來認證 的方法

關鍵點

AuthenticationProvider 本身也就是一個 介面 ,它有實現類 和的 子類DaoAuthenticationProvider

只有 兩個 方法

總結
這是一個抽象類,是 模板模 式。定義好了認證流程,我們去實現流程中的一些 環節 方法。達到了 自定義認證 的效果

的子類,實現了一些 抽象方法

retrieveUser

主要就是用 UserDetailsService 去查找用戶

createSuccessAuthentication

本質還是調用了父類的方法,就是新建了一個Authentication,然後將 UserDetails 的 信息 傳遞過去

UserDetailsService是一個介面,提供了一個方法

感覺這個介面沒什麼用,就是用來管理用戶類的

SS在http後台中起作用主要是基於 Servlet Filters 的,我們先來看看什麼是 Filter 是如何作用在 Servlet 中的。

springSecurityFilterChain 是個介面 , DefaultSecurityFilterChain 是它的實現類,而DefaultSecurityFilterChain 內部存在這一個 Filters 列表 ,關於SS中的過濾器和他們的執行順序(Order)可以查看 官方文檔 ,當我們需要自定義Filter的時候就會用到。 當請求到來時,在 ss 里邊的 Filter就會作用請求,如下圖 :

在上面我們說到了SS有 自己的一條過濾器鏈 ,下面就是截圖:(執行順序就是集合中的順序)

下面說一下幾個 比較重要的 Filter 的 處理邏輯

整個調用流程是,先調用其父類 .doFilter() 方法,然後再執行 .attemptAuthentication() 方法進行驗證;

父類是 (又是模板模式,子類實現抽象方法,父類定好流程)

requiresAuthentication
判斷是否需要當前filter處理,就是判斷路徑、請求方法等等

以的構造方法為例

successfulAuthentication

這里的認證就是 第一節的內容 ( this.getAuthenticationManager().authenticate(authRequest) )

從上圖中過濾器的執行順序圖中可以看出 AnonymousAuthenticationFilter 過濾器是在 等過濾器之後 ,如果它前面的過濾器 都沒有認證成功 ,Spring Security則為當前的SecurityContextHolder中添加一個Authenticaiton 的匿名實現類 AnonymousAuthenticationToken;

總結

ExceptionTranslationFilter 異常處理過濾器,該過濾器用來處理在系統 證授權過程 中拋出的異常(也就是下一個過濾器FilterSecurityInterceptor),主要是 處理 AuthenticationException 和 AccessDeniedException 。

此過濾器為認證授權過濾器鏈中 最後一個過濾器 ,該過濾器之後就是請求真正的 /xx服務

Spring Security默認使用 AffirmativeBased 實現 AccessDecisionManager 的 decide 方法來實現授權

到此位置 authentication 當前用戶信息,fl當前訪問的 資源路徑及attributes當前資源路徑的決策 (即是否需要認證)。剩下就是 判斷 當前用戶的角色Authentication.authorites 是否許可權 訪問決策訪問當前資源fi

Spring Security 核心過濾器鏈分析

閱讀全文

與spring過濾器網頁訪問許可權控制相關的資料

熱點內容
開一個污水管多少錢 瀏覽:967
菊酯類廢水 瀏覽:106
小區污水管漏水誰負責 瀏覽:128
藍牙解碼器音質提升大嗎 瀏覽:624
多功能動態水蒸氣蒸餾機組 瀏覽:915
高壓樹脂軟管型號 瀏覽:831
純水的質量怎麼計算 瀏覽:467
透明蠟溶於樹脂 瀏覽:314
特別大一塊硬水垢怎麼去除 瀏覽:101
農殘級試劑蒸餾 瀏覽:252
韓華1800樹脂粉 瀏覽:995
五菱榮光暖風濾芯怎麼換 瀏覽:895
凈水器預埋管怎麼埋 瀏覽:714
1噸離子交換水處理設備 瀏覽:397
污水廠金杯獎 瀏覽:805
污水處理站污泥處理 瀏覽:729
時代馭菱空調濾芯怎麼拆 瀏覽:136
煤礦污水處理成套設備多少錢 瀏覽:948
金華塵蟎過敏凈化器多少錢一台 瀏覽:289
環氧樹脂膠丙酮 瀏覽:41