Spring Security数据库授权

时间:2013-01-03 17:33:33

标签: java forms spring security login

我尝试使用Spring Security 3.1.3来保护Web应用程序。

目前我已经设置了一个简单的登录表单,该表单与在security-app-context.xml上硬编码的用户一起工作。现在我正试图让Spring从数据库中验证用户,那就是我遇到了问题 从我到目前为止,我需要在applicationContext.xml上为数据源放置一个bean,然后在security-app-context.xml文件上引用该数据源:

aplicationcontex.xml:

<bean id="dataSource"
  class="org.springframework.jdbc.datasource.DriverManagerDataSource">

  <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  <property name="url" value="jdbc:mysql://localhost:3306/webproject" />
  <property name="username" value="root" />
  <property name="password" value="root" />
</bean>

security-app-context.xml

<authentication-manager>
    <authentication-provider>            
        <jdbc-user-service data-source-ref="dataSource" />
    </authentication-provider>
</authentication-manager>

但是当我这样做时,从数据库中验证用户是行不通的。没有例外。

数据库上有两个表,用户(用户名,密码,已启用)和权限(用户名,roleName)。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

我没有足够的声誉来发表评论。无论如何,我不打算给出准确的答案。

我有几个猜测:

  • 您确定角色的数据库列名是roleName吗?不是权威?如果没有明确提供,也许Spring会查找一些默认名称。此行将定义您希望它运行的确切查询:

    <authentication-manager>
                <authentication-provider>
                            <jdbc-user-service data-source-ref="dataSource" 
                   users-by-username-query="
                      select username,password, enabled 
                      from users where username=?" 
                   authorities-by-username-query="
                      select u.username, ur.authority from users u, user_roles ur 
                      where u.user_id = ur.user_id and u.username=?" 
                     />
                </authentication-provider>
    </authentication-manager>
    
  • 您是否在web.xml中添加了安全过滤器?

  • 或许您的表格应该有一些默认名称,例如用户 ??