Apache Shiro Web應用整合 配置

2022-08-03 08:24:08 字數 4183 閱讀 1098

部落格分類: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 ...