当前位置: 首页 > 知识库问答 >
问题:

Spring Security自定义用户详细信息未进行身份验证

郭思淼
2023-03-14

同时尝试Spring启动、安全性和数据。

我刚刚遇到了这种情况:

我在内存数据库中使用H2,并在启动时用liquibase和一个用户用用户名和密码对其进行加密。

现在我想让Spring Security性根据H2进行身份验证。为此,我有以下代码:

@Override
protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsServiceImp);
 }

并且我实现了如下userDetails:

@Override
public UserDetails loadUserByUsername(String username) {
//this works, the user with pass is pulled
    com.fix.demo.logic.user.User byUsername = 
userRepository.findByUsername(username); 
    if (byUsername == null) {
        System.out.println("No user found with username: ");
        return null; //trow ex here
    }
    User user = new User(byUsername.getUsername(),
            byUsername.getPassword(), true, true,
            true, true, getAuthorities(Collections.singletonList("user")));
    //System.out.println(user.toString());
    //System.out.println(byUsername.toString()+ "   "+byUsername.getPassword());
        return user;
    }

但我的测试一直失败

身份验证不应为空

尝试登录会给我

凭据错误

要使UserDetailsService的自定义实现正常工作,需要什么?

这是失败的测试:

@Test
public void loginWithValidUserThenAuthenticated() throws Exception {
    FormLoginRequestBuilder login = formLogin()
            .user("admin")
            .password("root");

    mockMvc.perform(login)
            .andExpect(authenticated().withUsername("admin"));
}

共有1个答案

贺功
2023-03-14

原因之一是,密码可能已编码,您需要告诉spring security使用编码器。将以下行添加到配置覆盖。

auth.setPasswordEncoder(passwordEncoder());

定义密码编码器bean。

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}
 类似资料:
  • 问题内容: 这是我的情况: 一个Web应用程序对许多应用程序执行某种SSO 登录的用户,而不是单击链接,该应用就会向正确的应用发布包含用户信息(名称,pwd [无用],角色)的帖子 我正在其中一个应用程序上实现SpringSecurity以从其功能中受益(会话中的权限,其类提供的方法等) 因此,我需要开发一个 自定义过滤器 -我猜想-能够从请求中检索用户信息,通过自定义 DetailsUserSe

  • 问题内容: 我无法使用LDAP验证用户。我有以下详细信息: 我可以使用上述详细信息搜索值,但是如何使用用户名和密码对用户进行身份验证? 如果您遵循我之前的问题,那么您将理解,我可以成功连接到LDAP服务器,但无法对其进行身份验证。 用户验证: 我无法使用来连接到LDAP服务器,应该如何使用。我可以搜索给定的用户为。 问题答案: 这是我在各个地方发现的东西的混搭。如果您不想使用UnboundID S

  • 我对Java和Spring3(过去8年主要使用PHP)还很陌生。我已经使用spring security 3来处理所有默认的userDetails和userDetailsService,我知道我可以通过使用以下命令访问控制器中登录用户的用户名: 但有两个问题我想不通: > 我希望在用户登录时存储许多其他用户详细信息(如DOB、性别等),并在以后通过控制器进行访问。我需要做什么才能使创建的userD

  • 我有一个Keycloak连接器,它允许我通过SSO检索用户的用户名。我想使用这个用户名来认证用户,并在数据库中查找他的权限,并将这个用户权限注入到spring security中,以便能够使用它的功能。 我用自定义的UserDetailsService创建了一个自定义的authenticationProvider,但我一直面临的问题是,我每次都被重定向到spring security登录页面。我认

  • 总结 如何在Django MongoEngine中使用自定义用户模型和自定义身份验证后端(允许电子邮件/密码身份验证)?(这是否需要自定义后端?…即,在使用MongoEngine进行身份验证时使用电子邮件作为用户名。) 是否有直接(完整)的文档在Django中进行身份验证时,将Mongo用作主数据存储时使用自定义用户对象的示例?(博士后有如此清晰和全面的文档…) 细节 MongoEngine似乎只

  • 问题内容: 我正在尝试使用数据库表在Spring应用程序中应用安全性。 到目前为止,我的applicationContext-Security中有: 我对userDetailsS​​ervice的实现如下所示: 我的汇编程序如下所示: 现在,用户实体为: 我的userentitydao界面是: 实现是: 现在,当我尝试在tomcat上进行部署时,出现以下异常: 而不管我该怎么办,我不知道这是怎么回