package com.rzyc.service; import com.common.utils.jwt.JwtUtil; import com.rzyc.advice.CustomException; import com.rzyc.config.UserDetailsAndId; import com.rzyc.enums.SysEnterpriseState; import com.rzyc.mapper.ent.SysEnterpriseMapper; import com.rzyc.model.ent.SysEnterprise; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import java.util.Objects; /** * 用户登陆 Service * @author Xuwanxin * @date 2022/9/26 * */ @Service public class UserLoginService { /** * spring security 登陆业务接口service * */ private UserDetailsService userDetailsService; /** * spring security 内存中加密 * */ private PasswordEncoder passwordEncoder; /** * 企业端公司 * */ private SysEnterpriseMapper sysEnterpriseMapper; @Autowired public void UserLoginServiceFinder(UserDetailsService userDetailsService,PasswordEncoder passwordEncoder,SysEnterpriseMapper sysEnterpriseMapper){ this.userDetailsService = userDetailsService; this.passwordEncoder = passwordEncoder; this.sysEnterpriseMapper= sysEnterpriseMapper; } public String login(String username, String password)throws Exception { String token = null; try { UserDetails userDetails = userDetailsService.loadUserByUsername(username); if (Objects.isNull(userDetails)) { throw new UsernameNotFoundException("账号不存在"); } SysEnterprise sysEnterprise = sysEnterpriseMapper.findEnterpriseByName(username); if (Objects.isNull(sysEnterprise) || sysEnterprise.getState().equals(SysEnterpriseState.DISABLE)){ throw new CustomException("企业不存在或已经禁用"); } //这里可能会不对,因为我们是MD5,这个是spring security 中的 encoder加密 if (!passwordEncoder.matches(password, userDetails.getPassword())) { throw new BadCredentialsException("密码不正确"); } //spring security context insert UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authentication); //企业用户id String id = ((UserDetailsAndId)SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId(); token = JwtUtil.createToken(id); } catch (AuthenticationException e) { e.printStackTrace(); } return token; } }