2011-12-04 38 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