当前位置: 首页 > 面试题库 >

Spring Security / Hibernate:即使凭证正确,也有错误的凭证吗?

鲍高扬
2023-03-14
问题内容

嘿,我的基于springsecurity的登录有点混乱

我不断收到错误“凭据错误”

这是我的用户表:

![Usertable] [1]

这是来自applicationContext的dataSource:

<!-- database driver/location -->
<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/ams" />
    <property name="username" value="root" />
    <property name="password" value="root" />
</bean>

和我的securityContext:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:security="http://www.springframework.org/schema/security"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
              http://www.springframework.org/schema/security 
              http://www.springframework.org/schema/security/spring-security-3.0.xsd">

    <!-- <security:http auto-config="true" access-decision-manager-ref="accessDecisionManager"> -->
    <security:http auto-config="true">
        <security:intercept-url pattern="/login/login.do" access="IS_AUTHENTICATED_ANONYMOUSLY" />
        <security:intercept-url pattern="/login/doLogin.do" access="IS_AUTHENTICATED_ANONYMOUSLY" />
        <security:intercept-url pattern="/lib/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
        <security:intercept-url pattern="/css/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
        <security:intercept-url pattern="/images/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
        <security:intercept-url pattern="/resources/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
        <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_REMEMBERED" />
        <security:form-login login-page="/login/login.do" authentication-failure-url="/login/login.do?login_error=true" default-target-url="/test/showTest.do"/>
        <security:logout logout-success-url="/login/login.do" invalidate-session="true" />
        <security:remember-me key="rememberMe"/>
    </security:http>


    <security:authentication-manager>
        <security:authentication-provider>
            <security:jdbc-user-service data-source-ref="dataSource" 
            users-by-username-query="select USERNAME as username, PASSWORD as password, DELETED as deleted from ams.user where USERNAME=?"
            authorities-by-username-query="
                select distinct user.USERNAME as username, permission.NAME as authority 
            from scu.user, scu.user_role, scu.role, scu.role_permission, scu.permission
            where user.ID=user_role.USER_ID AND user_role.ROLE_ID=role_permission.ROLE_ID AND role_permission.PERMISSION_ID=permission.ID AND user.USERNAME=?"/>
            <!-- security:password-encoder ref="passwordEncoder" /> -->
        </security:authentication-provider>
    </security:authentication-manager>

    <bean id="passwordEncoder"
        class="org.springframework.security.authentication.encoding.ShaPasswordEncoder">
        <constructor-arg value="256" />
    </bean>
</beans>

当我尝试使用admin和init01登录时

它给了我错误的错误凭据… =(

任何建议表示赞赏!


问题答案:

password-encoder您的参考authentication-provider已被注释掉。如果您使用的是哈希密码,则需要一个密码编码器(应该如此)。还要检查此答案,特别是关于编写测试的第2点,以确保您使用的密码编码器与您存储在数据库中的密码编码器匹配。

您可能还想检查有关使用bcrypt作为普通SHA哈希的更安全替代方法的答案。



 类似资料:
  • 问题内容: 如您所见,我有我的数据库连接文件和另一个“受保护的”文件,我的凭据在其中,并且此文件包含在.gitignore中。我导入它并到达数据。很基本。因此,我的问题是: 这是正确的方法吗? 如果没有,我该怎么办?另外:如何为帐户和连接增加额外的安全性? 假设我有一个私人收藏,没人可以看到,我该如何特别保护这个收藏?我的意思是说,用密码或两步验证。 当前代码: 问题答案: …我有我的数据库连接文

  • 如果你使用的是 SSH 方式连接远端,并且设置了一个没有口令的密钥,这样就可以在不输入用户名和密码的情况下安全地传输数据。 然而,这对 HTTP 协议来说是不可能的 —— 每一个连接都是需要用户名和密码的。 这在使用双重认证的情况下会更麻烦,因为你需要输入一个随机生成并且毫无规律的 token 作为密码。 幸运的是,Git 拥有一个凭证系统来处理这个事情。 下面有一些 Git 的选项: 默认所有都

  • 我是Spring Security的新手,我做了以下教程:https://windoctor7.github.io/spring-jwt.html 但是我修改了一些数据库中搜索用户的代码,所以,我创建了一个@bean: 1部分,拦截呼叫。 我拦截“登录”并在数据库中搜索用户是否存在: } 用户是正确的,最后一行: 我在AbstractAuthenticationProcessingFilter中遇

  • 前文提到传统 Remember-Me 的实现方式中,通过 cookie 存储登录信息的方式存在安全问题,需要制定一系列校验策略和失效规则等等来确保可靠性,对开发者的技术要求较高;而通过表单登录的方式去触发浏览器的账户信息存储和自动填充的这种方法限制条件较多,且浏览器行为不可控,具体操作起来会比较麻烦。 因此浏览器提供了一套凭据管理 API(Crediential Management API),可

  • 问题内容: 我已经将jenkins的Subversion插件更新到了2.2版 现在,对于升级后首次构建的存储库以及外部外部某些内容发生更改的存储库,我会收到以下错误。它可以按预期用于所有其他构建。 我试图添加其他凭据,但这没有帮助。 现在,我希望有人对此有个想法,可以尝试解决此问题。 错误: 问题答案: 在对正式的错误报告进行了多次评论之后,我们可以解决此问题。 因此,要使其正常工作,您必须更新到

  • 我正在与Spring Boot开发一个单页应用程序 然后,我将应用程序打包并作为WAR部署到应用服务器/servlet容器等。应用程序开始拒绝来自firefox上我的客户端和rest客户端“rest client”的authenticated()请求。我已经通过我的JwtFilter监控了请求,它不是错误的凭证。 我尝试使用Glassfish 4.1.2(build 1)中的其余endpoint,