Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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
Java 通过限制登录尝试向Spring MVC安全性添加Bcrypt编码_Java_Spring_Spring Mvc_Spring Security_Spring Bean - Fatal编程技术网

Java 通过限制登录尝试向Spring MVC安全性添加Bcrypt编码

Java 通过限制登录尝试向Spring MVC安全性添加Bcrypt编码,java,spring,spring-mvc,spring-security,spring-bean,Java,Spring,Spring Mvc,Spring Security,Spring Bean,我有一个限制登录尝试的工作项目,我只需要添加Bcrypt密码加密。 我有以下几种豆子: <beans:bean id="customUserDetailsService" class="com.setelog.spring.service.CustomUserDetailsService"> <beans:property name="usersByUsernameQuery" value="select * from users where u

我有一个限制登录尝试的工作项目,我只需要添加Bcrypt密码加密。 我有以下几种豆子:

<beans:bean id="customUserDetailsService"
        class="com.setelog.spring.service.CustomUserDetailsService">
        <beans:property name="usersByUsernameQuery" value="select * from users where username = ?"/>
        <beans:property name="authoritiesByUsernameQuery" value="select username, role from user_roles where username =?" />
        <beans:property name="dataSource" ref="dataSource" />
    </beans:bean>

    <beans:bean id="userDetailsDao" class="com.setelog.spring.dao.UserDetailsDaoImpl" >
        <beans:property name="dataSource" ref="dataSource" />
    </beans:bean>


    <beans:bean id="authenticationProvider"
        class="com.setelog.spring.handler.LimitLoginAuthenticationProvider">
        <beans:property name="userDetailsService" ref="customUserDetailsService" />
        <beans:property name="userDetailsDao" ref="userDetailsDao" />
    </beans:bean>

    <authentication-manager>
        <authentication-provider ref="authenticationProvider" />
    </authentication-manager>

我有一个项目,它有以下功能使Bcrypt得以实现:

<authentication-manager>
    <authentication-provider user-service-ref="myUserDetailsService" >
        <password-encoder hash="bcrypt" />    
    </authentication-provider>
</authentication-manager>

但我似乎不能让它这样工作。可能是因为身份验证提供程序中的“ref”而不是“user service ref”


非常感谢您的帮助。

我设法解决了它!我只需要向authenticationProvider添加一个编码器bean:

<beans:bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>


    <beans:bean id="authenticationProvider"
        class="com.setelog.spring.handler.LimitLoginAuthenticationProvider">
        <beans:property name="userDetailsService" ref="customUserDetailsService" />
        <beans:property name="userDetailsDao" ref="userDetailsDao" />
        <beans:property name="passwordEncoder" ref="encoder" />

    </beans:bean>


如果您的
LimitLoginAuthenticationProvider
DaoAuthenticationProvider
您可以将编码器插入其中,如果不是,则必须在您自己的自定义提供程序中实现。将限制/锁定逻辑移动到一个
ApplicationListener
,它侦听
AbstractAuthenticationFailedEvent
s并更新数据库中的计数器(不确定您的逻辑到底做了什么)不是更容易吗。我假设你使用了一个计数器,当一个treshold被满足时,用户被禁用了?谢谢Deinum先生,我发布了我的答案。你的评论很有用