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.
165 lines
6.5 KiB
165 lines
6.5 KiB
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(); |
|
} |
|
|
|
}
|
|
|