Browse Source

发改委跳转逻辑变更

pengchaozhi 2 months ago
parent
commit
6603c4c0f8

+ 35 - 22
projects/src/main/java/com/rtrh/projects/web/controller/passport/LoginController.java

@@ -1,24 +1,6 @@
 package com.rtrh.projects.web.controller.passport;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import com.rtrh.projects.modules.problem.vo.QuestionQueryVO;
-import com.rtrh.projects.modules.rolemeun.dao.SecRoleDao;
-import com.rtrh.projects.modules.rolemeun.mapper.SecRoleMapper;
-import com.rtrh.projects.modules.rolemeun.po.MeunInfo;
-import com.rtrh.projects.modules.rolemeun.po.SecRole;
-import com.rtrh.projects.modules.system.enums.UserKindUnitEnum;
-import com.rtrh.projects.modules.task.service.TaskRecordsService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.servlet.ModelAndView;
-
+import cn.hutool.core.collection.CollectionUtil;
 import com.rtrh.common.util.StringUtil;
 import com.rtrh.core.repository.Page;
 import com.rtrh.projects.modules.policy.po.PolicyDocumentColumn;
@@ -27,14 +9,28 @@ import com.rtrh.projects.modules.policy.service.PolicyDocumentService;
 import com.rtrh.projects.modules.policy.vo.IndexShowColumnVO;
 import com.rtrh.projects.modules.policy.vo.PolicyDocumentVO;
 import com.rtrh.projects.modules.policy.vo.PolicyDocumetQueryVO;
+import com.rtrh.projects.modules.problem.vo.QuestionQueryVO;
 import com.rtrh.projects.modules.rolemeun.enums.MenuType;
+import com.rtrh.projects.modules.rolemeun.po.MeunInfo;
+import com.rtrh.projects.modules.rolemeun.po.SecRole;
 import com.rtrh.projects.modules.rolemeun.servicel.SecRoleservice;
+import com.rtrh.projects.modules.system.enums.UserKindUnitEnum;
 import com.rtrh.projects.modules.system.po.JUnit;
 import com.rtrh.projects.modules.system.service.JUnitService;
+import com.rtrh.projects.modules.task.service.TaskRecordsService;
 import com.rtrh.projects.web.controller.BaseController;
 import com.team.security.TeamShiroUser;
+import net.rubyeye.xmemcached.XMemcachedClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
 
-import cn.hutool.core.collection.CollectionUtil;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * 登录
@@ -54,8 +50,9 @@ public class LoginController extends BaseController {
 	private PolicyDocumentService policyDocumentService;
 	@Autowired
 	private TaskRecordsService taskRecordsService;
-    @Autowired
-    private SecRoleDao secRoleDao;
+	@Autowired
+	private XMemcachedClient memcachedClient;
+
 
 	/**
 	 * 最外层
@@ -181,4 +178,20 @@ public class LoginController extends BaseController {
 		return new ModelAndView("/vmodules/index.jsp");
 	}
 
+	@GetMapping("jumpPage/{cookieId}")
+	public ModelAndView jump(@PathVariable(value = "cookieId") String cookieId, @RequestParam("toUrl") String toUrl, ModelMap model) throws Exception {
+		Object o = memcachedClient.get(cookieId);
+		if(o == null) {
+			model.put("back", true);
+		} else {
+			model.put("back", false);
+		}
+		for (String s : (Collection<String>) o) {
+			response.addHeader("Set-Cookie", s);
+		}
+		model.put("toUrl", toUrl);
+		memcachedClient.delete(cookieId);
+
+		return new ModelAndView("/vmodules/jump.jsp");
+	}
 }

+ 10 - 0
projects/src/main/java/com/rtrh/projects/web/controller/passport/api/LoginApiController.java

@@ -1,6 +1,7 @@
 package com.rtrh.projects.web.controller.passport.api;
 
 import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONUtil;
 import com.rtrh.core.vo.Message;
 import com.rtrh.projects.modules.account.po.CommUser;
 import com.rtrh.projects.modules.account.service.CommLoginService;
@@ -12,6 +13,7 @@ import com.rtrh.projects.web.util.JwtUtil;
 import com.rtrh.projects.web.util.RemoteUtil;
 import com.team.security.MCSessionDAO;
 import com.team.security.UserToken;
+import net.rubyeye.xmemcached.XMemcachedClient;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authc.*;
 import org.apache.shiro.session.Session;
@@ -27,6 +29,7 @@ import javax.servlet.http.HttpSession;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.UUID;
 
 @RestController
 @RequestMapping("api")
@@ -38,6 +41,8 @@ public class LoginApiController extends BaseController {
 	private CommLoginService commLoginService;
 	@Autowired
 	private CommUserService commUserService;
+	@Autowired
+	private XMemcachedClient memcachedClient;
 
 	public static final Map<Object, Session> user_session = new HashMap<>();
 
@@ -113,6 +118,11 @@ public class LoginApiController extends BaseController {
 			shiroUserToken.setLoginAction("jump");
 			loginMethod(request, response, shiroUserToken, message);
 
+			Collection<String> headers = response.getHeaders("Set-Cookie");
+			String cookiesId = UUID.randomUUID().toString();
+			memcachedClient.add(cookiesId, 60*1000, headers); // 1分钟过期
+			message.setData(cookiesId);
+
 		} catch (Exception e) {
 			logger.error("", e);
 			message.addError("跳转异常");

+ 5 - 8
projects/src/main/java/com/rtrh/projects/web/controller/passport/api/SwitchApiController.java

@@ -1,6 +1,5 @@
 package com.rtrh.projects.web.controller.passport.api;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.rtrh.core.vo.Message;
 import com.rtrh.projects.outapi.result.JsonResult;
@@ -8,15 +7,16 @@ import com.rtrh.projects.outapi.result.ResultCode;
 import com.rtrh.projects.web.controller.BaseController;
 import com.rtrh.projects.web.util.JwtUtil;
 import com.team.security.TeamShiroUser;
-import org.apache.http.Header;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
 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 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 javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -63,15 +63,12 @@ public class SwitchApiController extends BaseController {
                 // 如果响应实体不为空,则输出响应内容
                 if (entity != null) {
                     String responseBody = EntityUtils.toString(entity);
-                    Header[] allHeaders = response.getAllHeaders();
-                    for(Header header : allHeaders) {
-                        httpServletResponse.addHeader(header.getName(), header.getValue());
-                    }
                     Message responseResult = JSONObject.parseObject(responseBody, Message.class);
                     if(responseResult.isSuccess()){
                         result.setCode(ResultCode.SUCCESS);
                         String outUrl = resourceBundle.getString("app.fgw.out.url");
                         result.setData("jumpUrl", outUrl);
+                        result.setData("cookieId", responseResult.getData());
                     } else {
                         result.setCode(ResultCode.SYSTEM_ERROR);
                         result.setMsg(responseResult.getMessage());

+ 1 - 1
projects/src/main/java/com/rtrh/projects/web/security/URLIntercepter.java

@@ -32,7 +32,7 @@ public class URLIntercepter extends HandlerInterceptorAdapter {
 	private boolean allowVisit(HttpServletRequest request, HttpServletResponse response) {
 		// 拦截未登录的url
 		handleCrossDomain(request, response);
-		String rex = "(policy/document/(columnDocument_*|detail_*|downDock_*))|(pdfHtml)|(backpassword)|(division)|(common)|(static&(!statics))|(junit/virfy)|(register)|(login)|(gxjLogin)|(admin(?!Index))|(register)|(logout)|(\\.css)|(\\.js)|(\\.png)|(\\.gif)|(\\.jpg)|(\\.bmp)|(\\.xls)|(subject/apply/*)";
+		String rex = "(policy/document/(columnDocument_*|detail_*|downDock_*))|(pdfHtml)|(backpassword)|(division)|(common)|(static&(!statics))|(junit/virfy)|(register)|(login)|(gxjLogin)|(jumpPage/*)|(admin(?!Index))|(register)|(logout)|(\\.css)|(\\.js)|(\\.png)|(\\.gif)|(\\.jpg)|(\\.bmp)|(\\.xls)|(subject/apply/*)";
 		String outApi = "outApi";
 		Pattern sinaPatten = Pattern.compile(rex, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
 		Pattern outApiPatten = Pattern.compile(outApi, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);

+ 4 - 7
projects/src/main/java/com/team/security/MCSessionDAO.java

@@ -1,19 +1,16 @@
 package com.team.security;
 
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Collections;
-
-
-
 import net.rubyeye.xmemcached.MemcachedClient;
-
 import org.apache.shiro.session.Session;
 import org.apache.shiro.session.UnknownSessionException;
 import org.apache.shiro.session.mgt.eis.AbstractSessionDAO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+
 public class MCSessionDAO extends AbstractSessionDAO {
 
 	private final static Logger log = LoggerFactory.getLogger(MCSessionDAO.class);

+ 2 - 0
projects/src/main/resources/rtrh-crypto.xml

@@ -19,6 +19,7 @@
 				<value>/outApi/subInfoExport/**</value>
 				<value>/outApi/auth/gxjLogin</value>
 				<value>/pdfHtml/**</value>
+				<value>/api/jumpLogin</value>
 			</list>
 		</property>
 		<property name="notDecryptoUrls">
@@ -27,6 +28,7 @@
 				<value>/outApi/subInfoExport/**</value>
 				<value>/outApi/auth/gxjLogin</value>
 				<value>/pdfHtml/**</value>
+				<value>/api/jumpLogin</value>
 			</list>
 		</property>
 	</bean>

+ 31 - 0
projects/src/main/webapp/vmodules/jump.jsp

@@ -0,0 +1,31 @@
+<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags"%>
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+	pageEncoding="UTF-8"%>
+<%@ page isELIgnored="false"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+   	<title>哈密市投资项目智慧平台</title>
+    <jsp:include page="common/common-meta-include.jsp"></jsp:include>
+    <jsp:include page="common/common-js-include.jsp"></jsp:include>
+    <jsp:include page="common/common-css-include.jsp"></jsp:include>
+    <!--[if lt IE 9]>
+    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
+    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
+    <![endif]-->
+</head>
+<body class="frame_bg">
+
+<script>
+if(${back}) {
+	window.location.back();
+} else {
+	window.location.href = "${toUrl}";
+}
+</script>
+</body>
+</html>

+ 1 - 1
projects/src/main/webapp/vmodules/top.jsp

@@ -139,7 +139,7 @@
                 App.postJson("/api/switch/toFgw", {type:'0'}, function (res) {
                     console.log(res);
                     if(res.code ===200){
-                        var targetUrl = res.data.jumpUrl + "/index";
+                        var targetUrl = res.data.jumpUrl+"/jumpPage/"+ res.data.cookieId + "?toUrl="+res.data.jumpUrl+"/index";
                         // var cookiesToSend = "rememberMe="+res.data.token;
                         // 将需要携带的cookie通过URL参数的形式附加到目标URL上
                         // targetUrl += "?cookies=" + encodeURIComponent(cookiesToSend);