Spring 安全自定义 UserDetails 未进行身份验证
Spring security custom UserDetails not authenticating
同时尝试 spring 启动、安全和数据。
我刚遇到这种情况:
我在内存数据库中使用 H2,并在启动时与一个用户使用 liquibase 进行 poblate
使用用户名和密码。
现在我希望 spring 安全性针对 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;
}
但我的测试一直失败
Authentication should not be null
尝试登录会给我
bad credentials
我的 UserDetailsService 自定义实现需要什么才能工作?
这是失败的测试:
@Test
public void loginWithValidUserThenAuthenticated() throws Exception {
FormLoginRequestBuilder login = formLogin()
.user("admin")
.password("root");
mockMvc.perform(login)
.andExpect(authenticated().withUsername("admin"));
}
其中一个原因是,密码可能已编码,您需要告诉 spring 安全人员使用编码器。将以下行添加到配置覆盖中。
auth.setPasswordEncoder(passwordEncoder());
定义 passwordEncoder bean。
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
同时尝试 spring 启动、安全和数据。
我刚遇到这种情况:
我在内存数据库中使用 H2,并在启动时与一个用户使用 liquibase 进行 poblate 使用用户名和密码。
现在我希望 spring 安全性针对 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;
}
但我的测试一直失败
Authentication should not be null
尝试登录会给我
bad credentials
我的 UserDetailsService 自定义实现需要什么才能工作?
这是失败的测试:
@Test
public void loginWithValidUserThenAuthenticated() throws Exception {
FormLoginRequestBuilder login = formLogin()
.user("admin")
.password("root");
mockMvc.perform(login)
.andExpect(authenticated().withUsername("admin"));
}
其中一个原因是,密码可能已编码,您需要告诉 spring 安全人员使用编码器。将以下行添加到配置覆盖中。
auth.setPasswordEncoder(passwordEncoder());
定义 passwordEncoder bean。
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}