Spring Security 自定义用户认证

红太狼 2022-05-20 06:59 328阅读 0赞

一、PasswordEncoder

在@Configuration注解的类下注入bean:

  1. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  2. import org.springframework.security.crypto.password.PasswordEncoder;
  3. @Bean
  4. public PasswordEncoder passwordEncoder () {
  5. return new BCryptPasswordEncoder();
  6. }

二、自定义登录业务

新建MyUserDetailsService类实现org.springframework.security.core.userdetails.UserDetailsService 接口 :

  1. package com.xh.sercurity;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.security.core.authority.AuthorityUtils;
  6. import org.springframework.security.core.userdetails.User;
  7. import org.springframework.security.core.userdetails.UserDetails;
  8. import org.springframework.security.core.userdetails.UserDetailsService;
  9. import org.springframework.security.core.userdetails.UsernameNotFoundException;
  10. import org.springframework.security.crypto.password.PasswordEncoder;
  11. import org.springframework.stereotype.Component;
  12. @Component
  13. public class MyUserDetailsService implements UserDetailsService {
  14. private Logger logger = LoggerFactory.getLogger(getClass());
  15. @Autowired
  16. private PasswordEncoder passwordEncoder;
  17. @Override
  18. public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
  19. // 根据用户名查找用户信息
  20. logger.info("login username is : " + username);
  21. // 权限
  22. // 账号过期 -账户是否锁定-密码过期-账户是否可用
  23. // passwordEncoder.encode("123456") 这是注册用的,这里写数据库读出的
  24. logger.info("数据库密码是: " + passwordEncoder.encode("123456"));
  25. // 用户名 密码(数据库查出来的,security自动与用户传入的对比) 权限
  26. // 用户名 密码 权限
  27. return new User(username, passwordEncoder.encode("123456"),
  28. true,true,true,true,
  29. AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
  30. }
  31. }

发表评论

表情:
评论列表 (有 0 条评论,328人围观)

还没有评论,来说两句吧...

相关阅读