From b3c6911c1e78563dc04998dd7bfb510130a9fcec Mon Sep 17 00:00:00 2001 From: huanghongfa <18228131219@163.com> Date: 星期一, 01 二月 2021 16:37:52 +0800 Subject: [PATCH] auth --- springcloud_k8s_panzhihuazhihuishequ/auth/src/main/java/com/panzhihua/auth/handel/UserAuthenticationProvider.java | 73 ++++++++++++++++++++++++++++++++++++ 1 files changed, 73 insertions(+), 0 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/auth/src/main/java/com/panzhihua/auth/handel/UserAuthenticationProvider.java b/springcloud_k8s_panzhihuazhihuishequ/auth/src/main/java/com/panzhihua/auth/handel/UserAuthenticationProvider.java new file mode 100644 index 0000000..6769438 --- /dev/null +++ b/springcloud_k8s_panzhihuazhihuishequ/auth/src/main/java/com/panzhihua/auth/handel/UserAuthenticationProvider.java @@ -0,0 +1,73 @@ +package com.panzhihua.auth.handel; + +import com.panzhihua.common.model.vos.LoginUserInfoVO; +import com.panzhihua.common.model.vos.R; +import com.panzhihua.common.service.user.UserService; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.LockedException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +/** + * @program: springcloud_k8s_panzhihuazhihuishequ + * @description: 登录认证 + * @author: huang.hongfa weixin hhf9596 qq 959656820 + * @create: 2020-11-24 16:14 + **/ +@Component +public class UserAuthenticationProvider implements AuthenticationProvider { + @Resource + private UserService userService; + @Override + public Authentication authenticate(Authentication authentication) throws AuthenticationException { + // 获取表单输入中返回的用户名 + String userName = (String) authentication.getPrincipal(); + // 获取表单中输入的密码 + String password = (String) authentication.getCredentials(); + // 查询用户是否存在 + R<LoginUserInfoVO> r = userService.getUserInfo(userName); + if (r.getCode()!=200) { + throw new UsernameNotFoundException("该账号不存在"); + } + LoginUserInfoVO loginUserInfoVO = r.getData(); + List<GrantedAuthority> grantedAuthorityList=new ArrayList<>(); + Set<String> roles = loginUserInfoVO.getRoles(); + if (!ObjectUtils.isEmpty(roles)) { + roles.forEach(s -> { + grantedAuthorityList.add(new SimpleGrantedAuthority(s)); + }); + } + if (ObjectUtils.isEmpty(loginUserInfoVO.getAccount())) { + throw new UsernameNotFoundException("该账号不存在"); + } + // 我们还要判断密码是否正确,这里我们的密码使用BCryptPasswordEncoder进行加密的 + if (!new BCryptPasswordEncoder().matches(password, loginUserInfoVO.getPassword())) { + throw new BadCredentialsException("密码不正确"); + } + // 还可以加一些其他信息的判断,比如用户账号已停用等判断 + if (loginUserInfoVO.getStatus().intValue()==2) { + throw new LockedException("该用户已被禁用"); + } +// 维护最后登录时间 + userService.putUserLastLoginTime(loginUserInfoVO.getUserId()); + return new UsernamePasswordAuthenticationToken(loginUserInfoVO, password, grantedAuthorityList); + } + + @Override + public boolean supports(Class<?> aClass) { + return true; + } +} -- Gitblit v1.7.1