登录接口逻辑@Override public UserDetails loadUserByUsername(String phone) throws UsernameNotFoundException { User user = selectUserByPhone(phone); if (null == user) { throw new UsernameNotFoundException("User not found with phone: " + phone); } return new org.springframework.security.core.userdetails.User(user.getPhoneNumber(), user.getPassword(), getAuthority(user)); } private List<GrantedAuthority> getAuthority(User user) { return Arrays.asList(new SimpleGrantedAuthority("ROLE_" + user.getRole())); },接口鉴权代码http.csrf().disable() .authorizeRequests() .antMatchers("/api-docs/**").permitAll() .antMatchers("/swagger-ui.html").permitAll() .antMatchers("/swagger-resources/**").permitAll() .antMatchers("/webjars/**").permitAll() .anyRequest().authenticated() .and() .httpBasic();和@Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); },那么访问swagger2地址时输入账号 密码,报错Encoded password does not look like BCrypt,请问是缺少什么代码导致的?
时间: 2024-04-26 18:24:40 浏览: 5
这个错误提示说明密码并没有被正确地使用BCryptPasswordEncoder进行加密。可能是在用户注册时没有使用PasswordEncoder对密码进行加密,或者在用户登录时没有对用户输入的密码进行正确的解密。你可以检查一下你的注册和登录接口的相关代码,确保密码在存储时被正确地加密,同时在登录时被正确地解密。另外,也可以确保你的密码加密方式是BCryptPasswordEncoder。
相关问题
security UserDetailsService.java如何配置 public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException 涉及com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
在使用 Spring Security 进行身份认证时,我们通常需要自定义一个实现了 `UserDetailsService` 接口的类来获取用户信息。该接口中的方法 `loadUserByUsername(String username)` 用于根据用户名获取用户信息并返回一个 `UserDetails` 对象。
在 `loadUserByUsername(String username)` 方法中,我们可以通过 MyBatis-Plus 提供的 `QueryWrapper` 来构建一个查询条件,以查询数据库中的用户信息。例如:
```java
@Service
public class MyUserDetailsService implements UserDetailsService {
@Autowired
private UserMapper userMapper;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 构建查询条件
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("username", username);
// 查询用户信息
User user = userMapper.selectOne(queryWrapper);
if (user == null) {
throw new UsernameNotFoundException("用户名不存在");
}
// 封装用户信息并返回
return new User(user.getUsername(), user.getPassword(), Collections.emptyList());
}
}
```
在上述代码中,我们首先通过 `QueryWrapper` 构建了一个查询条件,然后通过 `userMapper.selectOne(queryWrapper)` 方法查询数据库中的用户信息。最后,我们将查询到的用户信息封装成一个 `UserDetails` 对象并返回。
为这段代码添加注释@Component public class UserDetailsServiceImpl implements UserDetailsService { @Autowired private PasswordEncoder passwordEncoder; @Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { /** * 从数据库查:User是我自己写的类,getOne()是mybatis_plus的中的方法 * 就通过用户名查出一个用户 */ // 这个要从数据库取出来 User usersByUsername = userRepository.findUsersByUsername(username); if (null == usersByUsername) { throw new UsernameNotFoundException(CodeMsg.ADMIN_USERNAME_NO_EXIST.getMsg()); } /** * 创建一个权限集合,随你放多少 * 最后返回一个org.springframework.security.core.userdetails包下的User * 授权就给完了 * 我这里授权的是USER; */ ArrayList<SimpleGrantedAuthority> arrayList = new ArrayList<>(); arrayList.add(new SimpleGrantedAuthority("ROLE_USER")); return new org.springframework.security.core.userdetails.User(usersByUsername.getUsername(),usersByUsername.getPassword(),arrayList); } }
/**
* 这是一个实现了UserDetailsService接口的类,用于加载用户信息
*/
@Component
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private PasswordEncoder passwordEncoder; // 密码加密器
@Autowired
private UserRepository userRepository; // 用户信息仓库
/**
* 通过用户名查找用户信息
* @param username 用户名
* @return 返回一个UserDetails类型的对象
* @throws UsernameNotFoundException 如果用户名不存在则抛出该异常
*/
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 从数据库中查找指定用户名的用户信息
User usersByUsername = userRepository.findUsersByUsername(username);
if (null == usersByUsername) {
// 如果未查询到该用户,则抛出异常
throw new UsernameNotFoundException(CodeMsg.ADMIN_USERNAME_NO_EXIST.getMsg());
}
// 创建一个权限集合,这里只授权了USER
ArrayList<SimpleGrantedAuthority> arrayList = new ArrayList<>();
arrayList.add(new SimpleGrantedAuthority("ROLE_USER"));
// 返回一个org.springframework.security.core.userdetails包下的User对象,其中包含用户信息和授权信息
return new org.springframework.security.core.userdetails.User(
usersByUsername.getUsername(),
usersByUsername.getPassword(),
arrayList
);
}
}