package com.backendsys.config.Security; import com.backendsys.entity.System.SysUserDTO; import com.backendsys.mapper.System.SysUserMapper; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import java.util.Map; @Configuration @RequiredArgsConstructor public class ApplicationConfig { // 注入数据库操作DAO private final SysUserMapper sysUserMapper; /** * https://blog.csdn.net/studyday1/article/details/131992712 * 调用 AuthenticationManager 的 authenticate 方法,进行用户认证 */ @Bean public UserDetailsService userDetailsService() throws UsernameNotFoundException { //return username -> { // Map sysUserSimple = sysUserMapper.queryUserByIdOrName(null, username); // return new User((String) sysUserSimple.get("username"), (String) sysUserSimple.get("password"), AuthorityUtils.commaSeparatedStringToAuthorityList("admin, normal")); //}; // 接口每次调用都会执行?(username: 1) //return username -> { // System.out.println("UserDetailsService (username): " + username); // return new User(username, "", AuthorityUtils.commaSeparatedStringToAuthorityList("admin, normal")); //}; return username -> new User(username, "", AuthorityUtils.commaSeparatedStringToAuthorityList("admin, normal")); } /** * TODO 四 4.2 * @return 身份校验机制、身份验证提供程序 */ @Bean public AuthenticationProvider authenticationProvider() { // 创建一个用户认证提供者 DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); // 设置用户相信信息,可以从数据库中读取、或者缓存、或者配置文件 authProvider.setUserDetailsService(userDetailsService()); // 设置加密机制,若想要尝试对用户进行身份验证,我们需要知道使用的是什么编码 authProvider.setPasswordEncoder(passwordEncoder()); return authProvider; } /** * TODO 四 4.4 基于用户名和密码或使用用户名和密码进行身份验证 * @param config * @return * @throws Exception */ @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration config) throws Exception { return config.getAuthenticationManager(); } /** * TODO 四 4.3提供编码机制 * @return */ @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }