Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
spring security错误的凭据,即使它们是正确的_Spring_Spring Mvc_Spring Security_Spring Roo_Sha - Fatal编程技术网

spring security错误的凭据,即使它们是正确的

spring security错误的凭据,即使它们是正确的,spring,spring-mvc,spring-security,spring-roo,sha,Spring,Spring Mvc,Spring Security,Spring Roo,Sha,我使用的是SpringRoo,我的Spring安全设置如下(applicationContext Security.xml): 但是,当我尝试登录时,会出现错误凭据。发生了什么事 我真的无法找到一种方法来调试它,因为它都是在spring security内部发生的,所以我无法了解实际执行的查询,也无法/不知道从何处找出失败的原因。当您尝试作为用户进行身份验证时,请查看调试日志输出(总是个好主意)。很可能它说找不到用户“johnny” 这很可能是因为在同一个身份验证提供程序中既有jdbc用户服务又

我使用的是SpringRoo,我的Spring安全设置如下(
applicationContext Security.xml
):

但是,当我尝试登录时,会出现
错误凭据。发生了什么事


我真的无法找到一种方法来调试它,因为它都是在spring security内部发生的,所以我无法了解实际执行的查询,也无法/不知道从何处找出失败的原因。

当您尝试作为用户进行身份验证时,请查看调试日志输出(总是个好主意)。很可能它说找不到用户“johnny”

这很可能是因为在同一个
身份验证提供程序中既有
jdbc用户服务
又有
用户服务
,这两个服务都不起作用

使用两个独立的
身份验证提供程序
元素:

<authentication-provider>
    <jdbc-user-service ... />
</authentication-provider>
<authentication-provider>
    <user-service>
       ....
    </user-service>
</authentication-provider>

....

另外,正如我在你的另一个问题中所说的,除非是针对遗留系统,否则不应将SHA用作密码哈希算法。

在经历了更多痛苦之后,我设法解决了它。我再次创建了用户和角色实体表,并重新编写了查询:

        <jdbc-user-service data-source-ref="dataSource"
        users-by-username-query="SELECT u.login, u.password, u.enabled from users u where u.login=?"
        authorities-by-username-query="SELECT u.login, r.name FROM users u left join user_roles ur on u.id=ur.user join roles r on ur.roles=r.id WHERE u.login=?" 
        />


使用两个separte
authentication provide
与我的错误无关。

什么日志以及在哪里可以找到它取决于您如何配置日志记录-通常控制台是一个很好的开始。我不知道您对Java日志记录了解多少,但这是一个很好的概述,应该仍然相关,即使它最初是这样编写的我很久以前就知道了。我通常会在标准输出中看到错误,所以控制台会显示错误。但是,当我尝试使用johnny登录时,控制台不会显示任何错误。您需要正确配置日志记录,并确保启用了调试级别日志记录。我还有一个日志,其中包含
log4j.appender.FILE.Threshold=DEBUG
,这意味着启用了调试,但我没有得到任何输出当你登录的时候。
<authentication-provider>
    <jdbc-user-service ... />
</authentication-provider>
<authentication-provider>
    <user-service>
       ....
    </user-service>
</authentication-provider>
        <jdbc-user-service data-source-ref="dataSource"
        users-by-username-query="SELECT u.login, u.password, u.enabled from users u where u.login=?"
        authorities-by-username-query="SELECT u.login, r.name FROM users u left join user_roles ur on u.id=ur.user join roles r on ur.roles=r.id WHERE u.login=?" 
        />