『壹』 springMvc+shiro做許可權管理,頁面上的靜態資源,樣式圖片等沒有出現,用幾種方式過濾試過,還是不行
正常情況是不會出現這樣的,shiro對於靜態資源的處理,不用特殊配置。
只需要在shiroFilter過濾器filterChainDefinitions項中增加一個靜態資源處理規則就可以,例如允許/css/開頭的資源匿名訪問,只需要這樣一句配置就足矣。
/css/** = anon
配置完成後,未登錄就可以在瀏覽器中直接訪問css下的資源,新項目用的shiro,簡單而又實用的許可權框架。
『貳』 spring過濾器和攔截器的區別
(1)過濾器:
依賴於servlet容器,是JavaEE標准,是在請求進入容器之後,還未進入Servlet之前進行預處理,並且在請求結束返回給前端這之間進行後期處理。在實現上基於函數回調,可以對幾乎所有請求進行過濾,但是缺點是一個過濾器實例只能在容器初始化時調用一次。使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取的數據,比如:在過濾器中修改字元編碼;在過濾器中修改HttpServletRequest的一些參數,包括:過濾低俗文字、危險字元等
關於過濾器的一些用法可以參考我寫過的這些文章:
繼承HttpServletRequestWrapper以實現在Filter中修改HttpServletRequest的參數:
在SpringMVC中使用過濾器(Filter)過濾容易引發XSS的危險字元:
(2)攔截器:
攔截器不依賴與servlet容器,依賴於web框架,在SpringMVC中就是依賴於SpringMVC框架。在實現上基於Java的反射機制,屬於面向切面編程(AOP)的一種運用。由於攔截器是基於web框架的調用,因此可以使用spring的依賴注入(DI)獲取IOC容器中的各個bean,進行一些業務操作,同時一個攔截器實例在一個controller生命周期之內可以多次調用。但是缺點是只能對controller請求進行攔截,對其他的一些比如直接訪問靜態資源的請求則沒辦法進行攔截處理,攔截器功在對請求許可權鑒定方面確實很有用處
『叄』 struts2 Filterdispatch作用原理
struts2 Filterdispatch是Struts2的主要的Filter,負責四個方面的功能:
(1)執行Actions
(2)清除ActionContext
(3)維護靜態內容
(4)清除request生命周期內的XWork的interceptors
另註:該過濾器應該過濾所有的請求URL。一般被設置為/*.
具體:
(1)執行Actions
過濾器通過ActionMapper對象,來判斷是否應該被映射到Action.如果mapper對象指示他應該被映射,過濾鏈將會被終止,
然後Action被調用。這一點非常重要,如果同時使用SiteMesh filter,則SiteMesh filter應該放到該過濾器前,否則
Action的輸出將不會被裝飾。
(2)清除ActionContext
過濾器為了確保內存溢出,會自動的清除ActionContext。這可能會存在一些問題,在和其它的框架集成時,例如SiteMesh。
ActionContextCleanUp提供了怎麼處理這些問題的一些信息。
(3)維護靜態內容
過濾器也會維護在Struts2中使用的一些公共的靜態的內容,例如Javascript文件,CSS文件等。搜索/struts/*范圍內的
請求,然後將/struts/後面的值映射到一些struts的公共包中,也可以在你的類路徑中搜索。默認情況下會去查找以下
包:
org.apache.struts2.static
template
這樣你只用請求/struts/xhtml/styles.css,XHTML UI主題默認的樣式表將會被返回。同樣,AJAX UI組件需要的
Javascript文件,也可以在org.apache.struts2.static包中被找到。如果你想加入其它被搜索的包,在web.xml中
設置filter時,通過給"actionPackages"初始參數一個逗號隔開的包列表值來設定。
需注意的是:他會暴露一些比較敏感的信息例如,properites文件中的資料庫連接信息。
註:過濾器支持以下初始參數:
config - 被調入的逗號隔開的XML文件列表。
actionPackages - 被actions掃描的逗號隔開的packages列表。
configProviders - 逗號分隔的實現了ConfigurationProvider介面(建造Configuration時被使用)的實現類。
* - 任意的struts常量。
通過重載createDispatcher()方法,可以自定義dispather。
屬性列表:
(1)actionMapper:通過注入,提供一個ActionMapper實例。
(2)dispatcher:暴露給子類一個Dispatcher實例。
(3)encoding:存儲StrutsConstants.STRUTS_I18N_ENCODING的設置。
(4)filterConfig:通過初始參數,提供一個FilterConfig實例。
(5)lastModifiedCal:在緩存靜態content,提供一個格化的日期用於設定頭信息。
(6)log:提供一個logging實例。
(7)patchPrefixs:存儲靜態資源的路徑前綴信息。
(8)serveStatic:存儲StrutsConstants.STRUTS_SERVE_STATIC_CONTENT的設置。
(9)serveStaticBrowserCache:存儲StrutsConstants.STRUTS_SERVE_STATIC_BROWSER_CACHE的設置。
方法列表:
(1)(InputStream input, OutputStream output):從input復制數據到output。
(2)createDispatcher(FilterConfig filterConfig):創建默認的dispatcher對象,如果需要的話,子類可以重載此方法,
自定義一個dispatcher對象。
(3)destory():調用dispatcher.cleanup(),依次釋放本地線程,銷毀dispatcher對象。
(4)doFilter(ServletRequest request, ServeltResponse response, FilterChain chain):處理一個action或處理一個請求
的靜態內容。
(5)findInputStream(String name, String packagePrefix):搜索類路徑下的靜態資源。
(6)findStaticResoruce(String name, HttpServletRequest request, HttpServletResponse response):搜索靜態的資源,
直接復制到相應response的頭信息中。
(7)getContentType(String name):獲取指定資源的contentType。
(8)getFilterConfig():獲取FilterConfig實例。
(9)getServletContext():給WebLogic的一些版本提供一個工作區。
(9)init(FilterConfig filterCongfig):創建默認的dispatcher對象和設置靜態資源的默認包信息來初始化filter。
(10)parse(String packages):返回一個數組通過解析一個指定逗號分隔的packages列表。
(11)(HttpServletRequest request, HttpServletResponse response):對給定的request
對象進行封裝返回一個封裝HttpServletRequest對象。例如顯示的處理multipart數據。
(12)setMapper(ActionMapper actionMapper)
(13)setEncoding(String val)
(14)setServeStaticContent(String val)
(15)setServeStaticBrowserCache(String val)
『肆』 攔截器(Interceptor)和過濾器(Filter)的執行順序和區別
一、引言
探討攔截器(Interceptor)與過濾器(Filter)的執行順序及區別,以解決用戶登陸與許可權管理、菜單管理問題。本文將先關注過濾器的使用,而後深入攔截器的特性,並簡述各自應用場景。
二、區別
過濾器(Filter)
過濾器通常用於web.xml配置中,主要目的為解決字元編碼問題,防止亂碼。它在所有請求前執行,用於過濾、處理數據,如字元編碼修改、參數過濾等。
攔截器(Interceptor)
攔截器依賴SpringMVC框架,基於Java反射機制實現面向切面編程(AOP)。它對控制器請求進行攔截,可執行前置、後置操作,甚至異常處理,但僅限於控制器請求,不包括靜態資源訪問。
三、代碼示例
展示項目中同時配置過濾器與攔截器的執行流程,包括過濾器與攔截器的具體配置與測試。
四、總結
總結過濾器與攔截器的區別與特性,強調它們在web開發中的不同用途與執行順序。