2011-08-24 61 views
6

我想使用Spring安全来验证我的web应用程序中的用户。 因为我不是Spring框架的成熟用户,所以我无法弄清楚我们如何配置设置以使用jdbc-user-服务.. 我做了configurations.but它不工作使用mysql数据库在Spring安全中验证用户身份?

<authentication-manager> 
    <authentication-provider> 
     <jdbc-user-service data-source-ref="myDataSource"/> 
    </authentication-provider>   
</authentication-manager> 
<beans:bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
    <beans:property name="url" value="jdbc:mysql://localhost:3306/testDB"/> 
    <beans:property name="username" value="admin"/> 
    <beans:property name="password" value="admin"/> 
</beans:bean> 

..can请人帮我一个样本配置文件来解决这个问题如下。 在此先感谢。

+0

你的问题是什么?你可以发布堆栈跟踪,还是对你面临的任何问题有更清晰的描述? – beny23

回答

6

您通常使用自定义UserDetailsService来执行此操作。 UserDetailsService是一个DAO,用于在用户尝试登录时加载有关用户的数据。春季请看loadUserByUsername(String username)方法和UserDetails班。

呦需要在你的上下文中定义它:

<bean id="myDetailsService" 
    class="com.company.service.impl.MyDetailsService" /> 

要使用它,你可以将它添加到您的安全配置:

<authentication-manager> 
    <authentication-provider user-service-ref="myDetailsService" /> 
</authentication-manager> 

和你的安全过滤器将使用它。

如果您需要帮助实施它,您可以提出更具体的问题,但您不会遇到麻烦IMO。

+0

你是否也可以简单介绍一下它的实现呢..我曾尝试过,但没有得到。 –

+0

您可以在答案中提供的链接中看到有关实施的详细信息。 http://www.codercorp.com/blog/spring/security-spring/writing-custom-userdetailsservice-for-spring-security.html – Simeon

+0

是的,我知道了。 –

6

另一种方法是使用标准弹簧安全数据库模式(http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-schema.html)创建表。然后,你可以简单地使用Spring的JDBC-userservice:

<security:authentication-provider > 
    <security:jdbc-user-service data-source-ref="dataSource" /> 
    <security:password-encoder hash="sha" /> 
</security:authentication-provider> 

或者,如果你想用自己的模式,您可以覆盖这样的疑问:

<security:authentication-provider> 
    <securiy:jdbc-user-service 
     data-source-ref="dataSource" 
     users-by-username-query="select username, password from users where username=?" 
     authorities-by-username-query="select username, roleName from role..." 
     role-prefix="ROLE_" 
    /> 
</security:authentication-provider> 
+0

此查询是否修复?因为当我根据我的表更改查询时,这不起作用,只有当我根据此查询进行设计时才有效。 – RishiPandey

1

这些行添加到您的<authentication-provider>标签:

<authentication-provider> 
    <password-encoder hash="sha-256" /> 
    <jdbc-user-service data-source-ref="dataSource" 
      users-by-username-query=" 
       SELECT username, password, enabled 
       FROM user WHERE username = ?" 

      authorities-by-username-query=" 
       SELECT u.username, r.role_name 
       FROM user u, user_role r, assigned_role a 
       WHERE u.id = a.username 
       AND r.id = a.role_id 
       AND u.username = ?" 
     /> 
</authentication-provider> 

当然,你必须调整查询以匹配你的表名。

相关问题