From 2fcd97552d16718cc7997629fd637a73a5a4483f Mon Sep 17 00:00:00 2001
From: 郑永安 <zyazyz250@sina.com>
Date: 星期一, 19 六月 2023 14:44:19 +0800
Subject: [PATCH] 删除

---
 src/main/java/com/gk/firework/Controller/LoginController.java |  442 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 442 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/gk/firework/Controller/LoginController.java b/src/main/java/com/gk/firework/Controller/LoginController.java
new file mode 100644
index 0000000..e232d6b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/LoginController.java
@@ -0,0 +1,442 @@
+package com.gk.firework.Controller;
+
+import cn.hutool.core.lang.Dict;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Config.Oauth2.IRedisService;
+import com.gk.firework.Config.Oauth2.OauthRole;
+import com.gk.firework.Config.Oauth2.RedisKeyEnum;
+import com.gk.firework.Domain.AuthorizationInfo;
+import com.gk.firework.Domain.Log.JsonParams;
+import com.gk.firework.Domain.Utils.CommonUtil;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.UserVo;
+import com.gk.firework.Service.AuthorizationService;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.UserService;
+import com.google.common.base.Strings;
+import com.google.common.net.HttpHeaders;
+import io.jsonwebtoken.Claims;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.apache.commons.collections4.map.SingletonMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.servlet.http.HttpServletRequest;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+
+@Api(tags = "登录登出接口")
+@RequestMapping("/auth")
+@RestController
+public class LoginController {
+    @Autowired
+    IRedisService redisService;
+    @Autowired
+    UserService userService;
+    @Autowired
+    AuthorizationService authorizationService;
+    @Autowired
+    EnterpriseService enterpriseService;
+    @Value("${host}")
+    private String host;
+    /**
+     * login  produces = "application/json"
+     *
+     * @param jsonParam {"username":"用户名","password":"密码"}
+     * @return User
+     */
+    @PostMapping("/login")
+    @JsonParams
+    @ApiOperation(value = "管理端登录授权", notes = "登录授权接口,获取token")
+    public Msg login(@ApiParam(value = "username,password") @RequestParam String encryptStr) {
+        String jsonStr = new String(Base64.getDecoder().decode(encryptStr), StandardCharsets.UTF_8);
+        JSONObject jsonParam = JSON.parseObject(jsonStr);
+
+        String username = jsonParam.getString("username");
+        String password = jsonParam.getString("password");
+
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        try {
+            //query user
+            UserVo user = userService.selectUserVoByName(username);
+            if (null == user) {
+                msg.setCode("100");
+                msg.setMessage("用户不存在");
+                return msg;
+            }
+
+            if (user.getIssale() == 1) {
+                msg.setCode("100");
+                msg.setMessage("用户不存在");
+                return msg;
+            }
+
+            if (StringUtils.isNotBlank(user.getCompanynumber()) && enterpriseService.isLogOut(user.getCompanynumber())) {
+                msg.setCode("166");
+                msg.setMessage("用户已注销");
+                return msg;
+            }
+            // 疆外日期判断
+            Date now = new Date();
+            if (user.getDeadline() != null) {
+                if (user.getDeadline().before(now)){
+                    // 当前已经疆外用户已经超期使用 需要缴费
+                    msg.setCode("200");
+                    msg.setMessage("疆外用户已过期,请及时联系续期");
+                    msg.setResult(new SingletonMap<>("deadline",user.getDeadline()));
+                    return msg;
+                }
+
+            }
+
+
+            //Call login interface
+            String rs = HttpRequest.post( host + "/oauth/token")
+                    .setConnectionTimeout(10000)
+                    .setReadTimeout(10000)
+                    .header("Authorization", "Basic dWFhLXNlcnZpY2U6MTIzNDU2")
+                    .form(Dict.create()
+                            .set("username", username)
+                            .set("password", password)
+                            .set("grant_type", "password")
+                            .set("auth_type", "")
+                    ).execute().body();
+            Map map = JSON.parseObject(rs, Map.class);
+            Object access_token = map.get("access_token");
+            //Verify that the access_token is empty
+            if (ObjectUtil.isNull(access_token)) {
+                msg.setCode("103");
+                msg.setMessage("密码不正确");
+                return msg;
+            }
+            user.setToken("Bearer "+access_token);
+            //add redis
+            String token_key = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), map.get("jti"));
+            redisService.set(token_key, user, 60L*60L*18L);
+
+            user.setTokenexpired(60L*60L*18L);
+            /** 登录成功刷新用户 */
+            List<OauthRole> roleByUser = userService.selectRoleByUser(1);
+            if (null != user.getType()&& user.getType() == 1){
+                OauthRole oauthRole = new OauthRole("","超级管理员","super_admin","");
+                roleByUser.add(oauthRole);
+                user.setRoles(roleByUser);
+            }else {
+                roleByUser = userService.selectRoleByUser(user.getId().intValue());
+                user.setRoles(roleByUser);
+            }
+            user.setPassword(null);
+            msg.setResult(user);
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("102");
+            msg.setMessage("登录失败请稍后重试");
+        }
+        return msg;
+    }
+
+    @PostMapping("/salelogin")
+    @ApiOperation(value = "销售端登录授权", notes = "登录授权接口,获取token")
+    public Msg Salelogin(@ApiParam(value = "username,password") @RequestBody JSONObject jsonParam) {
+        String username = jsonParam.getString("username");
+        String password = jsonParam.getString("password");
+
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        try {
+            //query user
+            UserVo user = userService.selectUserVoByName(username);
+            if (null == user) {
+                msg.setCode("100");
+                msg.setMessage("用户不存在");
+                return msg;
+            }
+
+            if (user.getIssale() == 0) {
+                msg.setCode("100");
+                msg.setMessage("用户不存在");
+                return msg;
+            }
+
+            if (user.getStatus()!=null && user.getStatus() != 1){
+                msg.setCode("100");
+                msg.setMessage("用户已失效");
+                return msg;
+            }
+
+            if (user.getExpiredate() != null && user.getExpiredate().getTime() < System.currentTimeMillis()){
+                msg.setCode("100");
+                msg.setMessage("用户已失效");
+                return msg;
+            }
+
+            // 疆外日期判断
+            Date now = new Date();
+            if (user.getDeadline() != null) {
+                if (user.getDeadline().before(now)) {
+                    // 当前已经疆外用户已经超期使用 需要缴费
+                    msg.setCode("166");
+                    msg.setMessage("疆外用户已过期,请及时联系续期");
+                    return msg;
+                }
+
+            }
+            //Call login interface
+            String rs = HttpRequest.post( host + "/oauth/token")
+                    .setConnectionTimeout(10000)
+                    .setReadTimeout(10000)
+                    .header("Authorization", "Basic dWFhLXNlcnZpY2U6MTIzNDU2")
+                    .form(Dict.create()
+                            .set("username", username)
+                            .set("password", password)
+                            .set("grant_type", "password")
+                            .set("auth_type", "")
+                    ).execute().body();
+            Map map = JSON.parseObject(rs, Map.class);
+            Object access_token = map.get("access_token");
+            //Verify that the access_token is empty
+            if (ObjectUtil.isNull(access_token)) {
+                msg.setCode("103");
+                msg.setMessage("密码不正确");
+                return msg;
+            }
+            user.setToken("Bearer "+access_token);
+            //add redis
+            String token_key = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), map.get("jti"));
+            redisService.set(token_key, user, 60L*60L*18L);
+            user.setTokenexpired(60L*60L*18L);
+            user.setPassword(null);
+            msg.setResult(user);
+        } catch (Exception e) {
+            msg.setCode("102");
+            msg.setMessage("登录失败请稍后重试");
+        }
+        return msg;
+    }
+
+    @GetMapping("/verify")
+    @ApiOperation(value = "登录验证", notes = "登录验证:flag【true 成功】,【false 失败】", response = Msg.class)
+    public Msg verifyLogin(@ApiIgnore HttpServletRequest request) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        UserVo userVo = new UserVo();
+        String token = request.getHeader(HttpHeaders.AUTHORIZATION);
+        //解析token
+        Claims claims = CommonUtil.parseJWT(token);
+        if (null != claims){
+            String tokenKey = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), claims.getId());
+            Object userInfo = redisService.get(tokenKey);
+            if (null != userInfo){
+                Map map = JSON.parseObject(userInfo.toString(), Map.class);
+
+                userVo = userService.selectUserVoByName(map.get("username").toString());
+                if (null == userVo) {
+                    msg.setCode("100");
+                    msg.setMessage("用户不存在");
+                    return msg;
+                }
+
+                if (userVo.getIssale() == 1){
+                    if (userVo.getStatus()!=null && userVo.getStatus() != 1){
+                        msg.setCode("100");
+                        msg.setMessage("用户已失效");
+                        return msg;
+                    }
+
+                    if (userVo.getExpiredate() != null && userVo.getExpiredate().getTime() < System.currentTimeMillis()){
+                        msg.setCode("100");
+                        msg.setMessage("用户已失效");
+                        return msg;
+                    }
+
+                    Object loginObj =  map.get("logintime");
+                    Object authObj =  map.get("auth");
+                    if (loginObj != null && authObj != null){
+                        //通过auth查询授权码最后登录时间
+                        AuthorizationInfo authInfo = authorizationService.selectByUser(userVo.getCompanynumber(),authObj.toString());
+                        if (authInfo == null){
+                            msg.setCode("100");
+                            msg.setMessage("授权码无效");
+                            return msg;
+                        }
+
+                        if (authInfo.getLasttime().getTime() > Long.parseLong(loginObj.toString())){
+                            redisService.set(tokenKey, userInfo, 0L);
+                            msg.setCode("100");
+                            msg.setMessage("登录失效,请重新登录");
+                            return msg;
+                        }
+                    }
+                    userVo.setAuth(map.get("auth").toString());
+                }
+                else {
+                    /** 登录成功刷新用户 */
+                    List<OauthRole> roleByUser = userService.selectRoleByUser(1);
+                    if (null != userVo.getType()&& userVo.getType() == 1){
+                        OauthRole oauthRole = new OauthRole("","超级管理员","super_admin","");
+                        roleByUser.add(oauthRole);
+                        userVo.setRoles(roleByUser);
+                    }else {
+                        roleByUser = userService.selectRoleByUser(userVo.getId().intValue());
+                        userVo.setRoles(roleByUser);
+                    }
+                }
+                userVo.setToken(map.get("token").toString());
+                userVo.setTokenexpired(60L*60L*18L);
+                userVo.setPassword(null);
+                //更新登录超时时间
+                redisService.set(tokenKey, userInfo, 60L*60L*18L);
+            }else {
+                msg.setCode("100");
+                msg.setMessage("登录失效,请重新登录");
+                return msg;
+            }
+        }
+        msg.setResult(userVo);
+        return msg;
+    }
+
+    /**
+     * logout
+     *
+     * @return
+     */
+    @PostMapping("/logout")
+    @ApiOperation(value = "退出登录", notes = "退出登录接口", produces = "application/json", response = Msg.class)
+    public Msg logout(@ApiIgnore HttpServletRequest request) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        /** 解析token */
+        String header = request.getHeader(HttpHeaders.AUTHORIZATION);
+        if (header != null && !header.equals("undefined")) {
+            Claims claims = CommonUtil.parseJWT(header);
+            Optional.ofNullable(claims).ifPresent(cl -> {
+                String token_key = "auth:token:" + cl.getId();
+                redisService.remove(token_key);
+            });
+        }
+        return msg;
+    }
+
+    @PostMapping("/saleauthlogin")
+    @JsonParams
+    @ApiOperation(value = "销售端授权码登录授权", notes = "登录授权接口,获取token")
+    public Msg SaleAuthlogin(@ApiParam(value = "username,password,authcode") @RequestParam String encryptStr) {
+//        System.out.println("BASE64明文: "+encryptStr);
+        String jsonStr = new String(Base64.getDecoder().decode(encryptStr), StandardCharsets.UTF_8);
+//        System.out.println("解密后参数: "+jsonStr);
+        JSONObject jsonParam = JSON.parseObject(jsonStr);
+        String username = jsonParam.getString("username");
+        String password = jsonParam.getString("password");
+        String auth = jsonParam.getString("authcode");
+
+//        System.out.println("name: "+username+" ,pwd: "+password+" ,auth:"+auth);
+
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        try {
+            //query user
+            UserVo user = userService.selectUserVoByName(username);
+            if (null == user) {
+                msg.setCode("100");
+                msg.setMessage("用户不存在");
+                return msg;
+            }
+
+            if (user.getIssale() == 0) {
+                msg.setCode("100");
+                msg.setMessage("用户不存在");
+                return msg;
+            }
+
+            if (user.getStatus()!=null && user.getStatus() != 1){
+                msg.setCode("100");
+                msg.setMessage("用户已失效");
+                return msg;
+            }
+
+            if (user.getExpiredate() == null ||(user.getExpiredate() != null && user.getExpiredate().getTime() < System.currentTimeMillis())){
+                msg.setCode("100");
+                msg.setMessage("用户已失效");
+                return msg;
+            }
+
+            // 疆外日期判断
+            Date now = new Date();
+            if (user.getDeadline() != null) {
+                if (user.getDeadline().before(now)) {
+                    // 当前已经疆外用户已经超期使用 需要缴费
+                    msg.setCode("166");
+                    msg.setMessage("疆外用户已过期,请及时联系续期");
+                    return msg;
+                }
+
+            }
+
+            //验证auth是否存在
+            AuthorizationInfo authInfo = authorizationService.selectByUser(user.getCompanynumber(),auth);
+            if (authInfo == null){
+                msg.setCode("100");
+                msg.setMessage("授权码无效");
+                return msg;
+            }
+
+            Date logintime = new Date();
+            //Call login interface
+            String rs = HttpRequest.post( host + "/oauth/token")
+                    .setConnectionTimeout(10000)
+                    .setReadTimeout(10000)
+                    .header("Authorization", "Basic dWFhLXNlcnZpY2U6MTIzNDU2")
+                    .form(Dict.create()
+                            .set("username", username)
+                            .set("password", password)
+                            .set("auth", auth)
+                            .set("grant_type", "password")
+                            .set("auth_type", "")
+                    )
+                    .execute()
+                    .body();
+            Map map = JSON.parseObject(rs, Map.class);
+            Object access_token = map.get("access_token");
+            //Verify that the access_token is empty
+            if (ObjectUtil.isNull(access_token)) {
+                msg.setCode("103");
+                msg.setMessage("密码不正确");
+                return msg;
+            }
+            user.setToken("Bearer "+access_token);
+            user.setAuth(auth);
+            user.setLogintime(logintime.getTime());
+            //add redis
+            String token_key = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), map.get("jti"));
+            redisService.set(token_key, user, 60L*60L*18L);
+            user.setTokenexpired(60L*60L*18L);
+            user.setPassword(null);
+            msg.setResult(user);
+
+            //更新auth最后登录时间
+            authInfo.setLasttime(logintime);
+            authorizationService.updateById(authInfo);
+        } catch (Exception e) {
+            msg.setCode("102");
+            msg.setMessage("登录失败请稍后重试");
+        }
+        return msg;
+    }
+
+
+}

--
Gitblit v1.9.2