java - 在 Spring Security 4.0.1 中使用自定义身份验证过滤器导致用户注册失败

标签 java spring spring-mvc authentication spring-security

我正在尝试在数据库中创建用户实体后对用户进行身份验证,以便在安全上下文中设置经过身份验证的用户。但它无法抛出 Bad Credentials 错误。

这是代码

 UserDetails userDetails = userAuthService.loadUserByUsername(form.getUsername());
            UsernamePasswordAuthenticationToken loggedIn = new UsernamePasswordAuthenticationToken(userDetails, userDetails.getPassword(), userDetails.getAuthorities());
            //loggedIn.setDetails(userDetails);
            authMgr.authenticate(loggedIn);

我正在正确获取用户详细信息。在第一个声明中。

我正在使用如下所示的自定义身份验证

<authentication-manager alias="authMgr">
    <authentication-provider user-service-ref="userAuthService">
        <password-encoder hash="bcrypt"></password-encoder> 
    </authentication-provider>
</authentication-manager>
<beans:bean id="userAuthService" class="com.csn.service.UserAuthService" >
</beans:bean>

UserAuthService 类是这样的。

public class UserAuthService implements UserDetailsService,Serializable{
@Override
public UserDetails loadUserByUsername(String username)
        throws UsernameNotFoundException, DataAccessException {
    try{
        com.xxx.yyy.Authentication auth = new UserAuthDao().getUserByUsername(username);
        if(auth!=null){
            List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
            authorities.add(new com.xxx.ppp.GrantedAuthorityImpl(Constants.userRole));

            return new User(auth.getUsername(), auth.getPassword(), true, true, true, true, authorities);
        }
        else{
            return  new User(username, "", true, true, true, true, null);
        }
    }
    catch(Exception e){
        log.error(className, "loadUserByUsername", e);
    }
    return null;
}
}

最佳答案

这应该有帮助:

SecurityContextHolder.getContext().setAuthentication(loggedIn);

关于java - 在 Spring Security 4.0.1 中使用自定义身份验证过滤器导致用户注册失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30318627/

相关文章:

java - 如何使用 Java Streams 将未修改列表中的元素包含在修改列表中?

java - Spring Batch从文件获取数据并传递给过程

java - Spring Boot - GET( cucumber )的 MockMvc 结果为 null

java - Spring MVC + 数据表 : bind array[] parameter

java - 有什么方法可以为@RequestParam 获取BindingResult?

java - Spring JPA native 查询调用存储过程给出 “No converter found capable of converting from type”

java - 代码在正常运行时不工作,但在调试时工作(eclipse)

java - 如何自动化 Rust 代码的 Java 绑定(bind)?

java - 如何验证来自 Swing 文本框的小时和分钟?

mysql - 使用一个表/实体的查询结果来查询另一个实体/表