使用shiro 1.2.1对数据库进行身份验证

时间:2012-10-15 11:01:47

标签: java security authentication guice shiro

我在我的项目中使用Apache Shiro。目前我正在使用1.1.0版本,现在我正在尝试将Shiro组件迁移到最新版本1.2.1。但是,当我尝试对数据库进行用户身份验证时,由于某种原因它无法正常工作,我没有收到任何错误,但身份验证没有发生。

以下是我在shiro.ini文件中提供的数据库详细信息。

[main]
cacheManager = com.cacheManager.ShiroCacheManager
securityManager.cacheManager = $cacheManager

jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm

jdbcRealm.authenticationQuery = select user_pass from users where user_name = ?
jdbcRealm.userRolesQuery = select role_name from user_roles where user_name = ?

ds = com.mysql.jdbc.jdbc2.optional.MysqlDataSource
ds.serverName = 192.168.0.75
ds.port  = 3306
ds.user = test
ds.databaseName = appfuse
jdbcRealm.dataSource = $ds

但它仍然没有击中数据库。我正在使用tomcat服务器并尝试使用guice和shiro集成示例...

对此方面的任何帮助都非常感谢,并提前感谢您的帮助!

谢谢&问候,
Gupta Katakam

2 个答案:

答案 0 :(得分:1)

1.1和1.2之间有许多不同的东西可能会影响你的问题...这是我认为最有可能的那个

  • SHIRO-178 shiro.ini现在应该在WEB-INF文件夹中。你搬家了吗?

此外,还有许多与身份验证相关的更改:

  1. SHIRO-23将Jsecurity与Guice集成
  2. SHIRO-213密码和哈希管理
  3. SHIRO-279创建一个简单的命令行实用程序来散列密码
  4. SHIRO-280创建PasswordService以自动化用户密码管理技术
  5. SHIRO-287允许非配置线程静态访问Web配置的SecurityManager
  6. 我认为这是第一个,但entire list of release notes can be found here代表1.2.0和here for 1.2.1

答案 1 :(得分:0)

如果您使用的是Spring,请使用此

创建数据库accessdb

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager" />
    <property name="loginUrl" value="/login" />
    <property name="successUrl" value="/homePage" />
    <property name="unauthorizedUrl" value="/unauthorized" />
    <property name="filters">
        <util:map>
            <entry key="authc">
                <bean class="org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter" />
            </entry>
        </util:map>
    </property>
    <property name="filterChainDefinitions">
        <value>
            /favicon.ico = anon
            /assets/** = anon
            /** = authc
        </value>
    </property>
</bean>

<bean id="shiroCacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
    <property name="cacheManagerConfigFile" value="classpath:ehcache.xml"></property>
</bean>

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <property name="cacheManager" ref="shiroCacheManager" />
    <property name="realm" ref="myRealm" />
</bean>
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />

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

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="shiroDatasource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url"
        value="jdbc:mysql://localhost:3306/accessdb?autoReconnect=true&amp;zeroDateTimeBehavior=convertToNull" />
    <property name="username" value="username" />
    <property name="password" value="passwor" />
    <property name="validationQuery" value="SELECT 1" />
</bean>