2011-12-04 33 views
0

我有一個使用Eclipse鏈接爲我的JPA持久層設置的Spring-Roo項目,並且我創建了(用戶角色,用戶)表來管理我的安全性。我想知道是否有人用Spring項目設置了一個域來配置Apache Shiro,以便它使用數據庫表進行用戶名和密碼查找以及保存用戶名和密碼?使用Apache Shiro爲Spring Roo項目設置JDBC領域

目前我有一個Shiro.ini文件正在與一些測試角色和(用戶名,密碼)組合使用,但我想弄清楚如何改爲使用正確的過濾器來配置我的web.xml文件。下面是我的web.xml文件和當前的過濾器設置。

<filter> 
    <filter-name>Spring OpenEntityManagerInViewFilter</filter-name> 
    <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class> 
</filter> 
<!-- all declarations in shiro.ini file --> 
<filter> 
    <filter-name>ShiroFilter</filter-name> 
    <filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class> 
</filter> 


<filter-mapping> 
    <filter-name>Spring OpenEntityManagerInViewFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>ShiroFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

有沒有人有一個JDBC領域的例子使用(Postgres)與Apache Shiro和Spring?

回答

3

請參閱Shiro's Spring documentation瞭解正確的web.xml配置。它與您所展示的web.xml示例不同。

由於Spring的XML配置比Shiro的INI功能稍強,因此我們鼓勵Spring用戶使用完整的Spring配置而不是Shiro INI。請參閱該頁面的「Web應用程序」部分,以查看Shiro的僅Spring配置的示例。

在該頁面的文檔的「applicationContext.xml的」部分中,您將看到XML配置的

<bean id="myRealm" class="..."> 
... 
</bean> 

一部分。用你的JdbcRealm bean定義替換它。你可以注入你的Spring配置數據源爲預期:

<bean id="myRealm" class="org.apache.shiro.realm.jdbc.JdbcRealm"> 
    <property name="dataSource" ref="springConfiguredDataSource"/> 
    ... 
</bean> 

你可以看到,被看JdbcRealm's source code運行默認的SQL查詢。

您可以根據需要配置這些查詢。

請注意,如果您的數據模型是足夠複雜,使得JdbcRealm不足以滿足您的需求,它很容易擴展四郎的AuthorizingRealm和執行用戶/角色/許可使用任何數據源API你喜歡查找(JPA,休眠等)。

+0

Les謝謝你的回覆。兩個問題,你能解釋一下彈簧配置的dataSource是什麼意思嗎?這是否意味着我不需要一個shiro.ini文件,其中包含我的postgres驅動程序信息? – Warz

+0

是的,這是正確的 - 當使用Spring時,根本不需要'shiro.ini'文件。假設你已經按照doco所示設置了'web.xml',那麼其他一切都完全由Spring配置。 (shiro.ini的'[main]'部分實際上是通過JavaBeans getter和setter進行的'窮人'依賴注入。由於Spring直接使用DI,因此如果使用Spring配置,則不需要'shiro.ini' )。 –

+1

好的。我有一個JPA設置(EclipseLink),用於我所有的數據庫訪問調用和管理。您是否有Shiro JPARealms的任何示例,或者是否仍有可能使用JDBC領域進行授權/身份驗證? – Warz