ApplicationConfig.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package com.backendsys.config.Security;
  2. import com.backendsys.entity.System.SysUserDTO;
  3. import com.backendsys.mapper.System.SysUserMapper;
  4. import lombok.RequiredArgsConstructor;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. import org.springframework.security.authentication.AuthenticationManager;
  8. import org.springframework.security.authentication.AuthenticationProvider;
  9. import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
  10. import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
  11. import org.springframework.security.core.authority.AuthorityUtils;
  12. import org.springframework.security.core.userdetails.User;
  13. import org.springframework.security.core.userdetails.UserDetailsService;
  14. import org.springframework.security.core.userdetails.UsernameNotFoundException;
  15. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  16. import org.springframework.security.crypto.password.PasswordEncoder;
  17. import java.util.Map;
  18. @Configuration
  19. @RequiredArgsConstructor
  20. public class ApplicationConfig {
  21. // 注入数据库操作DAO
  22. private final SysUserMapper sysUserMapper;
  23. /**
  24. * https://blog.csdn.net/studyday1/article/details/131992712
  25. * 调用 AuthenticationManager 的 authenticate 方法,进行用户认证
  26. */
  27. @Bean
  28. public UserDetailsService userDetailsService() throws UsernameNotFoundException {
  29. //return username -> {
  30. // Map<String, Object> sysUserSimple = sysUserMapper.queryUserByIdOrName(null, username);
  31. // return new User((String) sysUserSimple.get("username"), (String) sysUserSimple.get("password"), AuthorityUtils.commaSeparatedStringToAuthorityList("admin, normal"));
  32. //};
  33. // 接口每次调用都会执行?(username: 1)
  34. //return username -> {
  35. // System.out.println("UserDetailsService (username): " + username);
  36. // return new User(username, "", AuthorityUtils.commaSeparatedStringToAuthorityList("admin, normal"));
  37. //};
  38. return username -> new User(username, "", AuthorityUtils.commaSeparatedStringToAuthorityList("admin, normal"));
  39. }
  40. /**
  41. * TODO 四 4.2
  42. * @return 身份校验机制、身份验证提供程序
  43. */
  44. @Bean
  45. public AuthenticationProvider authenticationProvider() {
  46. // 创建一个用户认证提供者
  47. DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
  48. // 设置用户相信信息,可以从数据库中读取、或者缓存、或者配置文件
  49. authProvider.setUserDetailsService(userDetailsService());
  50. // 设置加密机制,若想要尝试对用户进行身份验证,我们需要知道使用的是什么编码
  51. authProvider.setPasswordEncoder(passwordEncoder());
  52. return authProvider;
  53. }
  54. /**
  55. * TODO 四 4.4 基于用户名和密码或使用用户名和密码进行身份验证
  56. * @param config
  57. * @return
  58. * @throws Exception
  59. */
  60. @Bean
  61. public AuthenticationManager authenticationManager(AuthenticationConfiguration config) throws Exception {
  62. return config.getAuthenticationManager();
  63. }
  64. /**
  65. * TODO 四 4.3提供编码机制
  66. * @return
  67. */
  68. @Bean
  69. public PasswordEncoder passwordEncoder() {
  70. return new BCryptPasswordEncoder();
  71. }
  72. }