【问题标题】:BCryptPasswordEncoder in Spring securitySpring安全中的BCryptPasswordEncoder
【发布时间】:2016-12-03 05:45:03
【问题描述】:

我正在春季开发身份验证模块,并使用 BCryptPasswordEncoder 面临身份验证失败,如下所示 我通过管理员帐户登录成功并创建了一个虚拟用户。然后我通过 dummy user 成功登录 并退出。 检查两个帐户用户(管理员,用户)后,当我尝试通过任何用户登录时,我得到 login failure 错误。

注意:如果我不使用任何密码加密方案,那么我的模块可以正常工作。

<security:http auto-config="true" use-expressions="false">
    <security:form-login login-page="/login" login-processing-url="/login" username-parameter="custom_username" 
        password-parameter="custom_password"
        default-target-url="/index"
        always-use-default-target="true"
        authentication-failure-url="/login?error=true" />

    <security:logout logout-url="/logout" logout-success-url="/login?logout=true"/>

    <security:intercept-url pattern="/admin/*" access="ROLE_ADMIN"/>
    <security:intercept-url pattern="/hrm/*" access="ROLE_HRM, ROLE_ADMIN"/>
    <security:intercept-url pattern="/leave/*" access="ROLE_HRM, ROLE_USER, ROLE_ADMIN"/>
    <security:intercept-url pattern="/index**" access="ROLE_HRM, ROLE_USER, ROLE_ADMIN"/>
    <security:intercept-url pattern="/**" access="ROLE_ANONYMOUS, ROLE_HRM, ROLE_USER, ROLE_ADMIN"/>
</security:http>

<bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">        
    <constructor-arg name="strength" value="12" />
</bean>

<security:authentication-manager>
    <security:authentication-provider>

        <security:password-encoder  ref="encoder"/>

        <security:jdbc-user-service data-source-ref="dataSource"
            authorities-by-username-query="select app_user.username, role.name from app_user
                                           join app_user_role on app_user.id = app_user_role.users_id
                                           join role on app_user_role.roles_id = role.id
                                           where app_user.username = ?"
            users-by-username-query="select username,password,enabled from app_user where username = ?" />

    </security:authentication-provider>
</security:authentication-manager>

【问题讨论】:

  • 什么是尝试失败时获得的异常、状态码?

标签: java spring spring-mvc spring-security


【解决方案1】:

您的问题中缺少信息,但您可以尝试以下操作:

  1. 检查用户密码是否以加密方式存储在您的数据库中;

  2. 在 UsernamePasswordAuthenticationFilter.attemptAuthentication() 方法中放置断点并进行一些调试步骤。在这里,您可以了解工作流程中的实际问题。

请提供其他信息(状态代码、错误消息等)以获得更准确的帮助。谢谢

【讨论】:

  • 我没有收到任何异常,只是收到自定义错误消息作为无效的用户名和密码。我按照给定的链接进行身份验证github.com/jirkapinkas/java-blog-aggregator
  • 您发送身份验证请求时收到的状态码是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 2013-04-27
  • 2014-02-05
  • 1970-01-01
  • 2018-08-13
相关资源
最近更新 更多