部落格分類:shiro
將shiro 整合到任何 web 應用程式的最簡單的方法是在 web.xml 中配置 contextlistener 和 filter ,來使 shiro 知道如何讀取 shiro 的 ini 配置檔案。
注意:spring 框架使用者將不執行此設定。如果你使用 spring ,你將要閱讀關於 spring 特定的 web 配置。
web.xml
shiro 1.2 and later
在shiro 1.2 及以後版本,標準的 web 應用程式通過新增下面的 xml 塊到 web.xml 來初始化 shiro :
org.apache.shiro.web.env.environmentloaderlistener
… shirofilter
org.apache.shiro.web.servlet.shirofilter
shirofilter
*/ 這是假設shiro ini 配置檔案在以下兩個位置任意乙個,並使用最先發現的那個:
1. /web-inf/shiro.ini
2. 在 classpath 根目錄下 shiro.ini 檔案
下面是上述配置所做的事情:
l environmentloaderlistener 初始化乙個 shiro webenvironment 例項(其中包含 shiro 需要的一切操作,包括 securitymanager ),使得它在 servletcontext 中能夠被訪問。如果你需要在任何時候獲得 webenvironment 例項,你可以呼叫 webutils.getrequiredwebenvironment ( servletcontext )。
l shirofilter 將使用此 webenvironment 對任何過濾的請求執行所有必要的安全操作。
預設情況下,environmentloaderlistener 將建立乙個 iniwebenvironment 例項,讀取 shiro 基於 ini 檔案的配置。如果你願意,你可以在 web.xml 中指定乙個自定義的 servletcontext context-param :
shiroenvironmentclass
com.foo.bar.shiro.mywebenvironment
iniwebenvironment 將會去讀取和載入 ini 配置檔案。預設情況下,這個類會自動地在下面兩個位置尋找 shiro.ini 配置(按順序)。
1. /web-inf/shiro.ini
2. classpath:shiro.ini
它將使用最先發現的那個。
然而,如果你想把你的配置放在另一位置,你可以在web.xml 中用 contex-param 指定該位置。
shiroconfiglocations
your_resource_location_here
預設情況下,在servletcontext.getresource 方法定義的規則下, param-value 是可以被解析的。例如, /web-inf/some/path/shiro.ini 。
但你也可以指定具體的檔案系統,如classpath 或 url 位置,通過使用 shiro 支援的合適的資源字首,例如:
/* 如果你不想將你的ini 配置放在 /web-inf/shiro.ini 或 classpath:shiro.ini ,你可以指定乙個自定義的資源位置。新增乙個 configpath 的 init-param ,並指定資源位置。
shirofilter
org.apache.shiro.web.servlet.inishirofilter
configpath
/web-inf/anotherfile.ini
最後,也可以將你的ini 配置嵌入到 web.xml 中而不使用乙個獨立的 ini 檔案。你可以通過使用 init-param 做到這點,而不是 configpath :
shirofilter
org.apache.shiro.web.servlet.inishirofilter
config
# ini config here
...
內嵌配置對於小型的或簡單的應用程式通常是很好用的,但是由於以下原因一般把它具體化到乙個專用的shiro.ini 檔案中:
l 你可能編輯了許多安全配置,不希望為web.xml 新增版本控制。
l 你可能想從餘下的web.xml 配置中分離安全配置。
l 你的安全配置可能變得很大,你想保持web.xml 的苗條並易於閱讀。
l 你有個負責的編譯系統,相同的shiro 配置可能需要在多個地方被引用。
web ini配置
除了在配置章節描述的標準的[main] , [user] 和 [roles] 項外,你可以在 shiro.ini 檔案中指定具有 web 特性的 [urls] 項:
[urls]項允許你做一些在我們已經見過的任何 web 框架都不存在的東西:在你的應用程式中定義自適應過濾器鏈來匹配 url 路徑!
在urls 項的每一行格式如下:
url_ant_path_expression = path_specific_filter_chain
例如:
… [urls]
/index.html = anon
/user/create = anon
/user/** = authc
/admin/** = authc, roles[administrator]
/rest/** = authc, rest
/remoting/rpc/** = authc, perms["remot:invoke"]
等號左邊是乙個與web 應用程式上下文根目錄相關的 ant 風格的路徑表示式。請注意,所有的路徑表示式都是相對於你的應用程式的上下文根目錄而言的。所有的路徑都是相對於 httpservletrequest.getcontextpath() 的值來的。
順序的重要性!
url 路徑表示式按事先定義好的順序判斷傳入的請求,並遵循 first matchwins 這一原則。例如,讓我們假設有如下鏈的定義:
/account/** = ssl, authc
/account/signup = anon
如果傳入的請求旨在訪問/account/signup/index.html (所有 'anon'ymous 使用者都能訪問),那麼它將永不會被處理!原因是因為 /account/** 的模式第乙個匹配了傳入的請求,「短路」了其餘的定義。
始終記住基於first match wins 的原則定義你的過濾器鏈!
等號右邊是逗號隔開的過濾器列表,用來執行匹配該路徑的請求。它必須符合以下格式:
filter1[optional_config1], filter2[optional_config2], ..., filtern[optional_confign]
l filtern 是乙個定義在 [main] 項中的 filter bean 的名字。
l [optional_confign]是乙個可選的括號內的對特定的路徑,特定的過濾器有特定含義的字串(每個過濾器,每個路徑的具體配置!)。若果該過濾器對該 url 路徑並不需要特定的配置,你可以忽略括號,於是 filtenr 就變成了 filtern 。
因為過濾器標誌符定義了鏈(又名列表),所以請記住 順序問題 !請按順序定義好你的逗號分隔的列表,這樣請求就能夠流通這個鏈。
在過濾器鏈中能夠使用的過濾器「池」被定義在[main] 項。在 [main] 項中指派給它們的名字就是在過濾器鏈定義中使用的名字。例如:
[main]
… myfilter = com.company.web.some.filterimplementation
myfilter.property1 = value1
… [urls]
… /some/path/** = myfilter
Silverlight Caliburn應用框架2
silverlight caliburn應用框架1 silverlight caliburn應用框架2 silverlight caliburn應用框架3 silverlight caliburn應用框架4 silverlight caliburn應用框架5 silverlight caliburn...
FormsAuthentication應用之登入
配置項描述 name aspxauth loginurl login.aspx defaulturl default.aspx protection all timeout 30 path requiressl false slidingexpiration false cookieless use...
jquery easyui table 典型應用
主要介紹以下幾種功能的典型應用,並列出 提供參考 動態載入資料字段修改樣式,使用styler字段修改文字長度自適應批量的操作 1,動態載入資料 datagrid getdatagrid nowrap false,columns else else if value 警報 else if value ...