【问题标题】:Setting up a JDBC realm using Apache Shiro for a Spring Roo project使用 Apache Shiro 为 Spring Roo 项目设置 JDBC 领域
【发布时间】:2012-01-12 17:32:10
【问题描述】:

我使用 Eclipse 链接为我的 JPA 持久层设置了一个 Spring-Roo 项目,并且我创建了(用户角色、用户)表来管理我的安全性。我想知道是否有人使用 Spring 项目设置了一个领域来配置 Apache Shiro,以便它使用数据库表来查找用户名和密码并保存用户名和密码?

目前我有一个 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>

有没有人有一个使用(Postgres)与 Apache Shiro 和 Spring 的 JDBC 领域的示例?

【问题讨论】:

    标签: spring-roo shiro jdbcrealm


    【解决方案1】:

    请参阅Shiro's Spring documentation 了解正确的 web.xml 配置。它与您展示的 web.xml 示例不同。

    因为 Spring 的 XML 配置比 Shiro 的 INI 稍微强大一些,所以鼓励 Spring 用户使用完整的 Spring 配置而不是 Shiro INI。请参阅该页面的“Web 应用程序”部分,以查看 Shiro 的仅 Spring 配置示例。

    在该页面文档的“applicationContext.xml”部分,您会看到一个

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

    xml 配置的一部分。将其替换为您的 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 不足以满足您的需求,则可以轻松扩展 Shiro 的 AuthorizingRealm 并使用您喜欢的任何数据源 API(JPA 、休眠等)。

    【讨论】:

    • 感谢您的回复。两个问题,你能解释一下你所说的spring配置的数据源是什么意思吗?这是否意味着我不需要包含我的 postgres 驱动程序信息的 shiro.ini 文件?
    • 是的,没错——使用 Spring 时,根本不需要 shiro.ini 文件。假设您已经按照文档中所示设置了web.xml,其他一切都完全由 Spring 配置。 (shiro.ini 的[main] 部分实际上是通过JavaBeans getter 和setter 进行的“穷人”依赖注入。由于Spring 直接执行DI,如果您使用的是Spring 配置,则不需要shiro.ini)。跨度>
    • 好的。我有一个用于所有数据库访问调用和管理的 JPA 设置 (EclipseLink)。您是否有任何 Shiro JPARealms 的示例,或者我仍然可以使用 JDBC 领域进行授权/身份验证?
    猜你喜欢
    • 2015-05-31
    • 1970-01-01
    • 2016-08-13
    • 2016-03-12
    • 2018-03-14
    • 1970-01-01
    • 2011-06-18
    • 2013-03-20
    相关资源
    最近更新 更多