2011-11-28 56 views
1

请帮我在下面提及的场景....春季安全3.0拿不到/进程的用户凭据

的applicationContext-security.xml文件

<authentication-manager> 
    <authentication-provider> 
    <jdbc-user-service data-source-ref="dataSource" 
     users-by-username-query="SELECT username, password FROM myLibrary.user WHERE username=?" /> 
    </authentication-provider> 
</authentication-manager> 

数据库端(MySQL的)

CREATE TABLE `myLibrary`.`user` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `enabled` bit(1) DEFAULT NULL, 
    `fullName` varchar(255) DEFAULT NULL, 
    `password` varchar(120) DEFAULT NULL, 
    `username` varchar(40) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`), 
    UNIQUE KEY `username` (`username`) 
); 

XML的用户

<user-service> 
    <user name="admin" password="amdin" authorities="supervisor, user" /> 
    <user name="counter1" password="counter1" authorities="user" /> 
</user-service> 

“dataSource”;价值观也是完美的...... !!!在任何日志中都没有例外....这意味着图书馆的整合是完美的。实际上,当使用基于XML的用户定义时,它的效果很好......但是在数据库访问中它却不合适。

我的登录页面保持不变;我的意思是登录失败。请帮助朋友.... !!!!

+0

您确定没有例外。你有没有设置日志级别来调试春季班? – flash

+0

您能否发布登录失败的确切输出?并发布安全配置。 – Ralph

+0

谢谢... @flash ...对不起...看不到你的评论....是的,有**没有例外**,这是造成混乱... :) –

回答

0

对不起,延迟.... !!!所以问题出在用户负责的桌面上,必须是users。它运行真棒..... !!!感谢朋友.....非常感谢... !!!!

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

在上面的xml-lines之前;确保为用户的表必须是users也是另一个表authorities必须使用外键的存在是为了users - username。好吧..让我把数据库的一部分.. !!

CREATE TABLE `myLibrary`.`users` ( `id` int(11) NOT NULL AUTO_INCREMENT,  `enabled` bit(1) DEFAULT NULL,  `fullName` varchar(255) DEFAULT NULL,  `password` varchar(120) DEFAULT NULL,  `username` varchar(40) NOT NULL,  PRIMARY KEY (`id`),  UNIQUE KEY `id` (`id`),  UNIQUE KEY `username` (`username`) ); 

CREATE TABLE `myLibrary`.`authorities` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `authority` varchar(255) NOT NULL, 
    `username` varchar(255) NOT NULL, 
    `allowed` bit(1) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`), 
    KEY `fk_username` (`username`), 
    CONSTRAINT `fk_username` FOREIGN KEY (`username`) REFERENCES `users` (`username`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ; 

请注意, authorities(allowed)不是强制性的....它是我的代码的一部分..因为我想显示用户....所有它的权限,无论它的权限使用。

我使用hibernate等我得到ID场......和越野当然是高达你作为FAS,因为它的可用性关注。

祝您有美好的一天...... !!!!

:)

1

您需要更改查询了一下,因为JdbcDaoImpl预计3个参数:

  • 用户名
  • 密码
  • 启用

,所以你需要添加true作为最后一个参数:

<jdbc-user-service data-source-ref="dataSource" 
    users-by-username-query="SELECT username, password, true 
     FROM myLibrary.user WHERE username=?" /> 

不幸的是,这是不是非常有据可查的API,但你应该看看的org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl


者均基于source code: 如果使用部门,则还必须指定一个authorities-by-username-query(除了默认一个是你所需要的)

<jdbc-user-service 
    data-source-ref="dataSource" 
    users-by-username-query="SELECT username, password, true FROM myLibrary.user WHERE username=?" 
    authorities-by-username-query="SELECT username,authority from users WHERE username=?" 
/> 

当然,这是一个例子,查询可能不会对你的表工作!

+0

谢谢拉尔夫.....我明白你的观点......但我的qi = uestion没有“权威机构 - 用户名 - 查询”....在我的方法中有没有任何错误.. ????? –

+0

BikahSahoo:你是对的,我没有阅读'xml-user'的权利。但现在更有趣的问题是,这个文件是什么。 'jdbc-user-service'将不会注意它(因为我知道的票价) – Ralph

+0

好吧...我想通过** jdbc连接**向** spring-security **提供用户凭据。那么为什么** jdbc-user-service ** .... !!!!其次......凭证将来自**用户**表......所以这就是为什么**用户通过用户名查询**。 –