浏览代码

切换系统实现

Perperon 4 月之前
父节点
当前提交
0f9707f2cb

+ 5 - 1
projects/pom.xml

@@ -530,7 +530,11 @@
 			<scope>test</scope>
 		</dependency>
 		<!-- 测试依赖结束 -->
-
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpclient</artifactId>
+			<version>4.5.13</version> <!-- 请使用最新版本 -->
+		</dependency>
 	</dependencies>
 
 

+ 51 - 4
projects/src/main/java/com/rtrh/projects/outapi/controller/AuthApiController.java

@@ -6,12 +6,12 @@ import java.util.Objects;
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.rtrh.projects.modules.rolemeun.dao.SecRoleMeunDao;
 import com.rtrh.projects.modules.rolemeun.po.SecRole;
+import com.rtrh.projects.modules.rolemeun.po.SecRoleMeun;
+import com.rtrh.projects.web.util.JwtUtil;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import com.rtrh.common.modules.vcode.VCodeManager;
 import com.rtrh.common.modules.vcode.exception.VCodeFailException;
@@ -105,6 +105,53 @@ public class AuthApiController extends BaseOutApiController {
 		return result;
 	}
 
+	/**
+	 * 工信局切换发改委登录验证
+	 * @return
+	 */
+	@TokenAuthenticate(AuthenticateType.NONE)
+	@GetMapping("gxjLogin")
+	public JsonResult gxjLogin(@RequestParam String token) {
+		JsonResult result = new JsonResult();
+		try {
+			//对token进行解密得到用户名
+			String username = JwtUtil.validateToken(token);
+			CommUser commUser = commUserService.findCommUserByLoginname(username);
+			if(null == commUser){
+				result.setCode(ResultCode.LOGIN_FAIL);
+			}
+			if(CommUserChecker.isDisabledUser(commUser)){
+				result.setCode(ResultCode.ACCOUNT_DISABLE);
+			}
+			SecUser user = secUserService.getById(commUser.getId());
+			String tokenApp = jwtUtils.createToken(user);
+			result.setData("token",tokenApp);
+
+			Boolean isLead=user.getIsLead()==null?false:user.getIsLead();
+
+			String roleCode="";
+			SecRole role=secRoleservice.getById(user.getKind());
+			if(null!=role){
+				roleCode=role.getCode();
+				result.setData("roleCode",roleCode);
+				if(roleCode.equals("001")){
+					result.setData("kind","2");
+					return result;
+				}
+			}
+			if (isLead&&"1".equals(user.getKindUnit())){
+				result.setData("kind","3");
+			}else{
+				result.setData("kind",user.getKindUnit());
+			}
+
+		} catch (Exception e) {
+			logger.error("", e);
+			result.setCode(ResultCode.SYSTEM_ERROR, e.getMessage());
+		}
+		return result;
+	}
+
 	@TokenAuthenticate
 	@PostMapping("outLogin")
 	public JsonResult outLogin() {

+ 3 - 1
projects/src/main/java/com/rtrh/projects/outapi/result/JsonResult.java

@@ -5,9 +5,11 @@ import java.util.HashMap;
 import java.util.Map;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.annotation.JSONField;
+import com.rtrh.projects.web.util.ResultCodeDeserializer;
 
 public class JsonResult {
-
+	@JSONField(deserializeUsing = ResultCodeDeserializer.class)
 	private Integer code = ResultCode.SUCCESS.getCode();
 	
 	private String msg = "";

+ 49 - 13
projects/src/main/java/com/rtrh/projects/web/controller/passport/api/SwitchApiController.java

@@ -1,34 +1,70 @@
 package com.rtrh.projects.web.controller.passport.api;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.rtrh.projects.outapi.result.JsonResult;
 import com.rtrh.projects.web.controller.BaseController;
 import com.rtrh.projects.web.util.JwtUtil;
 import com.team.security.TeamShiroUser;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.util.ResourceBundle;
 
 @RestController
-@RequestMapping("/switch")
+@RequestMapping("/app/switch")
 public class SwitchApiController extends BaseController {
 
     /**
      * 切换到发改委系统
+     *
      * @param request
      * @return
      */
-    @GetMapping("/toFgw")
-    public String switchToFgw(HttpServletRequest request) {
-
-        //获取当前用户信息
+    @PostMapping("/toFgw")
+    public Object switchToFgw() {
+        // 获取当前用户信息
         TeamShiroUser curUser = getCurUser();
-        //使用jwt生成token
+        // 使用jwt生成token
         String token = JwtUtil.generateToken(curUser.getLoginName());
-
+        if (token == null || token.isEmpty()) {
+            // 处理token生成失败的情况
+            throw new RuntimeException("token生成失败"); // 或者抛出异常,由全局异常处理器处理
+        }
+        ResourceBundle resourceBundle = ResourceBundle.getBundle("config");
+        String url = resourceBundle.getString("app.fgw.url");
         // 拼接 B 系统的 URL
-        String targetUrl = "http://localhost:8090/projects/api/login?token=" + token;
-        return "redirect:" + targetUrl;
+        // 获取B系统的登录token
+        String targetUrl = url+"/projects/outApi/auth/fgwLogin?token=" + token;
+
+        // 创建一个HttpClient实例
+        // 创建一个HttpClient实例
+        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
+            // 创建一个HttpGet请求
+            HttpGet request = new HttpGet(targetUrl);
+            // 发送请求并获取响应
+            try (CloseableHttpResponse response = httpClient.execute(request)) {
+                // 获取响应实体
+                HttpEntity entity = response.getEntity();
+                // 如果响应实体不为空,则输出响应内容
+                if (entity != null) {
+                    String responseBody = EntityUtils.toString(entity);
+                    System.out.println("Response body: " + responseBody);
+                    JsonResult result = JSONObject.parseObject(responseBody, JsonResult.class);
+                    result.setMsg(url);
+                    return result;
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
     }
 
 }

+ 2 - 1
projects/src/main/java/com/rtrh/projects/web/controller/subject/SubInfoExportController.java

@@ -40,8 +40,9 @@ import com.rtrh.projects.modules.projects.vo.export.*;
 import com.rtrh.projects.modules.system.service.ISubInduService;
 import com.rtrh.projects.modules.utils.CustomCellWriteWidthStrategy;
 import com.rtrh.projects.modules.utils.DateUtils;
-import com.rtrh.projects.modules.utils.QualificationsDeclareCellWriteHandler;
 import com.rtrh.projects.modules.utils.MyStringUtils;
+import com.rtrh.projects.modules.utils.QualificationsDeclareCellWriteHandler;
+//import com.rtrh.projects.modules.utils.StringUtils;
 import com.rtrh.projects.outapi.result.JsonResult;
 import com.rtrh.projects.web.util.ExcelStyleUtil;
 import com.rtrh.projects.web.util.SheetData;

+ 1 - 1
projects/src/main/java/com/rtrh/projects/web/util/JwtUtil.java

@@ -5,7 +5,7 @@ import io.jsonwebtoken.SignatureAlgorithm;
 import java.util.Date;
 
 public class JwtUtil {
-    private static final String SECRET_KEY = "yourSecretKey";
+    private static final String SECRET_KEY = "cereshuzhitingnizhenbangcereshuzhitingnizhenbang";
 
     public static String generateToken(String username) {
         return Jwts.builder()

+ 24 - 0
projects/src/main/java/com/rtrh/projects/web/util/ResultCodeDeserializer.java

@@ -0,0 +1,24 @@
+package com.rtrh.projects.web.util;
+
+import com.alibaba.fastjson.parser.DefaultJSONParser;
+import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
+import com.rtrh.projects.outapi.result.ResultCode;
+import java.lang.reflect.Type;
+
+public class ResultCodeDeserializer implements ObjectDeserializer {
+    @Override
+    public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
+        int code = parser.parseObject(Integer.class); // 从 JSON 中解析整数
+        for (ResultCode resultCode : ResultCode.values()) {
+            if (resultCode.getCode() == code) {
+                return (T) resultCode; // 返回匹配的枚举常量
+            }
+        }
+        throw new IllegalArgumentException("Unknown result code: " + code); // 如果没有匹配的枚举常量,则抛出异常
+    }
+
+    @Override
+    public int getFastMatchToken() {
+        return 0; // 通常不需要重写这个方法,除非你知道你在做什么
+    }
+}

+ 3 - 1
projects/src/main/resources/config.properties

@@ -1,2 +1,4 @@
 flow_vedio_path=/home/data/file/flew_hami.mp4
-flow_img_path=/home/data/file/flow.svg
+flow_img_path=/home/data/file/flow.svg
+
+app.fgw.url=http://localhost:8089

+ 1 - 1
projects/src/main/resources/dbconfig.properties

@@ -18,6 +18,6 @@ jdbc.password=Chaoliu@0917!@#
 
 #\u4ECE\u6570\u636E\u6E90\uFF0C\u5728mybatis\u67E5\u8BE2\u7684\u65B9\u6CD5\u4E0A\u6DFB\u52A0\u6CE8\u89E3@TargetDataSource("secondary")\u5219\u4F7F\u7528\u8BE5\u6570\u636E\u6E90\u8FDB\u884C\u67E5\u8BE2
 jdbc.secondary.driver=com.mysql.jdbc.Driver
-jdbc.secondary.url=jdbc:mysql://139.155.7.62:3306/subject_old?useUnicode=true&useSSL=false&characterEncoding=UTF-8&autoReconnect=true
+jdbc.secondary.url=jdbc:mysql://139.155.7.62:3306/subject?useUnicode=true&useSSL=false&characterEncoding=UTF-8&autoReconnect=true
 jdbc.secondary.username=root
 jdbc.secondary.password=Chaoliu@0917!@#

+ 1 - 0
projects/src/main/webapp/vmodules/statics/analysisScreen_two.jsp

@@ -1208,4 +1208,5 @@
 
 </script>
 </body>
+
 </html>

+ 17 - 0
projects/src/main/webapp/vmodules/top.jsp

@@ -95,6 +95,11 @@
         <li class="layui-nav-item">
             <div class="top-cutline-normal"></div>
         </li>
+        <li class="layui-nav-item">
+            <div style="display: flex; align-items: center; height: 100%;">
+                <button class="layui-btn" @click="changeSystem">返回发改委系统</button>
+            </div>
+        </li>
         <li class="layui-nav-item">
             <a style="padding:0;margin-left:25px;">
 				<span class="txt">
@@ -122,6 +127,18 @@
                 this.collapse = !this.collapse;
                 window.parent.postMessage({collapse: this.collapse}, "*");
             },
+            changeSystem() {
+                App.postJson("/app/switch/toFgw", {}, function (res) {
+                    console.log(res);
+                    if(res.code ===200){
+                        var targetUrl = res.msg+"/projects/index";
+                        var cookiesToSend = "rememberMe="+res.data.token;
+                        // 将需要携带的cookie通过URL参数的形式附加到目标URL上
+                        targetUrl += "?cookies=" + encodeURIComponent(cookiesToSend);
+                        window.location.href = targetUrl;
+                    }
+                });
+            }
         }
     })
 </script>