You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
6.5 KiB
166 lines
6.5 KiB
3 years ago
|
package com.fr.plugin;
|
||
|
|
||
|
import com.fr.decision.fun.impl.AbstractEmbedRequestFilterProvider;
|
||
|
import com.fr.json.JSONObject;
|
||
|
import com.fr.log.FineLoggerFactory;
|
||
|
import com.fr.plugin.transform.FunctionRecorder;
|
||
|
import com.fr.stable.StringUtils;
|
||
|
|
||
|
import javax.servlet.ServletException;
|
||
|
import javax.servlet.http.HttpServletRequest;
|
||
|
import javax.servlet.http.HttpServletResponse;
|
||
|
import java.io.IOException;
|
||
|
import java.io.PrintWriter;
|
||
|
import java.io.StringWriter;
|
||
|
import java.io.UnsupportedEncodingException;
|
||
|
import java.net.URLDecoder;
|
||
|
import java.util.Enumeration;
|
||
|
import java.util.HashMap;
|
||
|
import java.util.Map;
|
||
|
import java.util.Set;
|
||
|
|
||
|
@FunctionRecorder(localeKey = "frfilter")
|
||
|
public class FRloginFilter extends AbstractEmbedRequestFilterProvider {
|
||
|
|
||
|
private void sendRedirect(HttpServletResponse res, String url) {
|
||
|
res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
|
||
|
res.setHeader("Location", url);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void filter(HttpServletRequest request, HttpServletResponse httpServletResponse) throws IOException, ServletException {
|
||
|
String uri = request.getRequestURI();
|
||
|
if (uri != null && uri.contains("v5/design/report/share") && request.getMethod().equalsIgnoreCase("GET")) {
|
||
|
FineLoggerFactory.getLogger().info("拦截器捕获一个请求,需要跳转share {}", uri);
|
||
|
if (request.getParameter("sendTwo") != null) {
|
||
|
return;
|
||
|
}
|
||
|
String url = getUrl(request);
|
||
|
FineLoggerFactory.getLogger().info("拦截器捕获一个请求,跳转出来的 {}", url);
|
||
|
sendRedirect(httpServletResponse, url);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// private String getUrl(HttpServletRequest request){
|
||
|
// String url = "/";
|
||
|
// try {
|
||
|
// url = "http://" + request.getServerName()//服务器地址
|
||
|
// + ":"
|
||
|
// + request.getServerPort() + request.getRequestURI() ;
|
||
|
// String queryString = request.getQueryString();
|
||
|
// String header2url = header2url(request);
|
||
|
// if (StringUtils.isNotBlank(queryString)) {
|
||
|
// url+= "?"+queryString+header2url;
|
||
|
// }else{
|
||
|
// url+="?a=1"+header2url;
|
||
|
// }
|
||
|
// if(url.contains("?")){
|
||
|
// url+="&sendTwo=true";
|
||
|
// }else{
|
||
|
// url+="?sendTwo=true";
|
||
|
// }
|
||
|
// } catch (Exception e) {
|
||
|
// printException2Frlog(e);
|
||
|
// }
|
||
|
// return url;
|
||
|
// }
|
||
|
public static void printException2Frlog(Exception e) {
|
||
|
StringWriter writer = new StringWriter();
|
||
|
e.printStackTrace(new PrintWriter(writer));
|
||
|
String s = writer.toString();
|
||
|
FineLoggerFactory.getLogger().error("错误:{}", s);
|
||
|
}
|
||
|
//
|
||
|
// private String header2url(HttpServletRequest request){
|
||
|
// StringBuffer buffer=new StringBuffer();
|
||
|
// String context = request.getHeader("X-Context");
|
||
|
// if (StringUtils.isNotBlank(context)) {
|
||
|
// try {
|
||
|
// context = URLDecoder.decode(context, "UTF-8");
|
||
|
// } catch (UnsupportedEncodingException e) {
|
||
|
// e.printStackTrace();
|
||
|
// }
|
||
|
// JSONObject jsonObject = new JSONObject(context);
|
||
|
// String userNo = jsonObject.getString("usrNo");
|
||
|
// String userNm = jsonObject.getString("usrNm");
|
||
|
// String pstNo = jsonObject.getString("pstNo");
|
||
|
// String instNo = jsonObject.getString("instNo");
|
||
|
// String accInstNo = jsonObject.getString("accInstNo");
|
||
|
// String admnInstNo = jsonObject.getString("admnInstNo");
|
||
|
// buffer.append("&userNo=").append(userNo).append("&userNm=").append(userNm).append("&pstNo=").append(pstNo).append("&instNo=").append(instNo)
|
||
|
// .append("&accInstNo=").append(accInstNo).append("&admnInstNo=").append(admnInstNo);
|
||
|
// }
|
||
|
//
|
||
|
// buffer.append("&sendTwo=true");
|
||
|
// return buffer.toString();
|
||
|
// }
|
||
|
|
||
|
private String getUrl(HttpServletRequest request) {
|
||
|
String url = "/";
|
||
|
try {
|
||
|
url = "http://" + request.getServerName()//服务器地址
|
||
|
+ ":"
|
||
|
+ request.getServerPort() + request.getRequestURI();
|
||
|
Enumeration<String> parameterNames = request.getParameterNames();
|
||
|
Map<String, String> reqParams = new HashMap<>();
|
||
|
while (parameterNames.hasMoreElements()) {
|
||
|
String key = parameterNames.nextElement();
|
||
|
reqParams.put(key, request.getParameter(key));
|
||
|
}
|
||
|
Map<String, String> parmas = header2url(request);
|
||
|
reqParams.putAll(parmas);
|
||
|
String header2url = map2String(reqParams);
|
||
|
FineLoggerFactory.getLogger().info("转换之后的url参数:{}", header2url);
|
||
|
if (url.contains("?")) {
|
||
|
url += header2url;
|
||
|
} else {
|
||
|
url += "?a=1" + header2url;
|
||
|
}
|
||
|
|
||
|
} catch (Exception e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
url += "&sendTwo=true";
|
||
|
return url;
|
||
|
}
|
||
|
|
||
|
|
||
|
private Map<String, String> header2url(HttpServletRequest request) {
|
||
|
Map<String, String> params = new HashMap<>();
|
||
|
String context = request.getHeader("X-Context");
|
||
|
if (StringUtils.isNotBlank(context)) {
|
||
|
try {
|
||
|
context = URLDecoder.decode(context, "UTF-8");
|
||
|
} catch (UnsupportedEncodingException e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
JSONObject jsonObject = new JSONObject(context);
|
||
|
String userNo = jsonObject.getString("usrNo");
|
||
|
String userNm = jsonObject.getString("usrNm");
|
||
|
String pstNo = jsonObject.getString("pstNo");
|
||
|
String instNo = jsonObject.getString("instNo");
|
||
|
String accInstNo = jsonObject.getString("accInstNo");
|
||
|
String admnInstNo = jsonObject.getString("admnInstNo");
|
||
|
params.put("usrNo", userNo);
|
||
|
params.put("usrNm", userNm);
|
||
|
params.put("pstNo", pstNo);
|
||
|
params.put("instNo", instNo);
|
||
|
params.put("accInstNo", accInstNo);
|
||
|
params.put("admnInstNo", admnInstNo);
|
||
|
}
|
||
|
params.put("sendTwo", "true");
|
||
|
return params;
|
||
|
}
|
||
|
|
||
|
private String map2String(Map<String, String> params) {
|
||
|
StringBuffer buffer = new StringBuffer();
|
||
|
Set<String> strings = params.keySet();
|
||
|
for (String key : strings) {
|
||
|
buffer.append("&").append(key).append("=").append(params.get(key));
|
||
|
}
|
||
|
return buffer.toString();
|
||
|
}
|
||
|
|
||
|
}
|