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