pioneer
2 years ago
commit
78df8db495
21 changed files with 1179 additions and 0 deletions
@ -0,0 +1,6 @@ |
|||||||
|
# open-JSD-9412 |
||||||
|
|
||||||
|
JSD-9412 cas单点集成\ |
||||||
|
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||||
|
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||||
|
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。 |
@ -0,0 +1,7 @@ |
|||||||
|
<root> |
||||||
|
<casLoginUrl>http://xxx/login</casLoginUrl> |
||||||
|
<casValidateUrl>http://xxxx/proxyValidate</casValidateUrl> |
||||||
|
<casClientServerName>x.x.x.x:8080</casClientServerName> |
||||||
|
<roleValidateUrl>http://xx/fine_report/report_access_validation</roleValidateUrl> |
||||||
|
<isAuthority>true</isAuthority> |
||||||
|
</root> |
Binary file not shown.
Binary file not shown.
@ -0,0 +1,30 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin> |
||||||
|
<id>com.fr.plugin.jsd9683</id> |
||||||
|
<name><![CDATA[xx数据中台插件]]></name> |
||||||
|
<active>yes</active> |
||||||
|
<version>1.0</version> |
||||||
|
<env-version>10.0</env-version> |
||||||
|
<jartime>2018-07-31</jartime> |
||||||
|
<vendor>fr.open</vendor> |
||||||
|
<description><![CDATA[]]></description> |
||||||
|
<change-notes><![CDATA[ |
||||||
|
[2018-08-01]修改一点问题。<br/> |
||||||
|
[2018-07-31]初始化插件。<br/> |
||||||
|
]]></change-notes> |
||||||
|
<extra-decision> |
||||||
|
<WebResourceProvider class="com.fr.plugin.jsd9683.webResourceProvider.Jsd9683WebResourceProvider"/> |
||||||
|
|
||||||
|
|
||||||
|
<GlobalRequestFilterProvider class="com.fr.plugin.jsd9683.filter.CasFilter"/> |
||||||
|
<GlobalRequestFilterProvider class="com.fr.plugin.jsd9683.filter.Jsd9683Filter"/> |
||||||
|
<GlobalRequestFilterProvider class="com.fr.plugin.jsd9683.filter.RequestGlobalFilter"/> |
||||||
|
|
||||||
|
|
||||||
|
<ControllerRegisterProvider class="com.fr.plugin.jsd9683.controller.Jsd9683ControllerProvider"/> |
||||||
|
</extra-decision> |
||||||
|
<extra-core> |
||||||
|
|
||||||
|
</extra-core> |
||||||
|
<function-recorder class="com.fr.plugin.jsd9683.Jsd9683PluginLifecycleMonitor"/> |
||||||
|
<lifecycle-monitor class="com.fr.plugin.jsd9683.Jsd9683PluginLifecycleMonitor"/> |
||||||
|
</plugin> |
@ -0,0 +1,60 @@ |
|||||||
|
package com.fr.plugin.jsd9683; |
||||||
|
|
||||||
|
|
||||||
|
import com.fr.base.PropertiesUtils; |
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContext; |
||||||
|
import com.fr.plugin.jsd9683.conf.Jsd9683ConfigXmlConfigReader; |
||||||
|
|
||||||
|
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.transform.FunctionRecorder; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.stable.xml.XMLTools; |
||||||
|
import com.fr.workspace.WorkContext; |
||||||
|
|
||||||
|
import java.io.*; |
||||||
|
|
||||||
|
|
||||||
|
@EnableMetrics |
||||||
|
@FunctionRecorder |
||||||
|
public class Jsd9683PluginLifecycleMonitor extends AbstractPluginLifecycleMonitor { |
||||||
|
@Override |
||||||
|
@Focus(id = "com.fr.plugin.jsd9683", text = "jsd9683", source = Original.PLUGIN) |
||||||
|
public void afterRun(PluginContext pluginContext) { |
||||||
|
|
||||||
|
// PreHandlerFactory.getInstance().registerRequestCheckers(new MyTemplateRequestChecker());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FineLoggerFactory.getLogger().info("插件启动:"); |
||||||
|
//读取webroot下的配置文件
|
||||||
|
String envPath = WorkContext.getCurrent().getPath(); |
||||||
|
FineLoggerFactory.getLogger().info("envPath:"+envPath); |
||||||
|
String webReport = (new File(envPath)).getParent(); |
||||||
|
FineLoggerFactory.getLogger().info("webReport:"+webReport); |
||||||
|
File envFile = new File(webReport+File.separator+"conf"+File.separator+"bg.xml"); |
||||||
|
try { |
||||||
|
XMLTools.readFileXML(Jsd9683ConfigXmlConfigReader.getInstance(), envFile); |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
FineLoggerFactory.getLogger().info(pluginContext.getID()+" startup....."); |
||||||
|
FineLoggerFactory.getLogger().info("插件启动"); |
||||||
|
FineLoggerFactory.getLogger().info("jsd9683 plugin start .........................."); |
||||||
|
|
||||||
|
|
||||||
|
// ddd();
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void beforeStop(PluginContext pluginContext) { |
||||||
|
FineLoggerFactory.getLogger().info("插件停止"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
package com.fr.plugin.jsd9683.beans; |
||||||
|
|
||||||
|
public class DeleteUserBean { |
||||||
|
private String orgCode; |
||||||
|
private String userName; |
||||||
|
|
||||||
|
|
||||||
|
public void setOrgCode(String orgCode) { |
||||||
|
this.orgCode = orgCode; |
||||||
|
} |
||||||
|
|
||||||
|
public void setUserName(String userName) { |
||||||
|
this.userName = userName; |
||||||
|
} |
||||||
|
|
||||||
|
public String getOrgCode() { |
||||||
|
return orgCode; |
||||||
|
} |
||||||
|
|
||||||
|
public String getUserName() { |
||||||
|
return userName; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,53 @@ |
|||||||
|
package com.fr.plugin.jsd9683.beans; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
public class ReportFileBean { |
||||||
|
|
||||||
|
private String name; |
||||||
|
private String path; |
||||||
|
private String previewUrl; |
||||||
|
private boolean isDir; |
||||||
|
|
||||||
|
private ArrayList<ReportFileBean> children; |
||||||
|
|
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPath(String path) { |
||||||
|
this.path = path; |
||||||
|
} |
||||||
|
|
||||||
|
public void setChildren(ArrayList<ReportFileBean> children) { |
||||||
|
this.children = children; |
||||||
|
} |
||||||
|
|
||||||
|
public String getName() { |
||||||
|
return name; |
||||||
|
} |
||||||
|
|
||||||
|
public String getPath() { |
||||||
|
return path; |
||||||
|
} |
||||||
|
|
||||||
|
public String getPreviewUrl() { |
||||||
|
return previewUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isDir() { |
||||||
|
return isDir; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDir(boolean dir) { |
||||||
|
isDir = dir; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPreviewUrl(String previewUrl) { |
||||||
|
this.previewUrl = previewUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public ArrayList<ReportFileBean> getChildren() { |
||||||
|
return children; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package com.fr.plugin.jsd9683.conf; |
||||||
|
|
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.xml.XMLReadable; |
||||||
|
import com.fr.stable.xml.XMLableReader; |
||||||
|
|
||||||
|
public class Jsd9683ConfigXmlConfigReader implements XMLReadable { |
||||||
|
private static Jsd9683ConfigXmlConfigReader instance; |
||||||
|
|
||||||
|
public static Jsd9683ConfigXmlConfigReader getInstance(){ |
||||||
|
if(instance == null){ |
||||||
|
instance = new Jsd9683ConfigXmlConfigReader(); |
||||||
|
} |
||||||
|
return instance; |
||||||
|
} |
||||||
|
|
||||||
|
public static String CAS_LOGIN_URL = ""; |
||||||
|
public static String CAS_VALIDATE_URL = ""; |
||||||
|
public static String CAS_SERVER_NAME = ""; |
||||||
|
public static String ROLE_VALIDATE_URL = ""; |
||||||
|
public static String isAuthority = "true"; |
||||||
|
|
||||||
|
public void readXML(XMLableReader reader) { |
||||||
|
if (reader.isChildNode()) { |
||||||
|
String nodeName = reader.getTagName(); |
||||||
|
if ("casLoginUrl".equals(nodeName)) { |
||||||
|
CAS_LOGIN_URL = StringUtils.trim(reader.getElementValue()); |
||||||
|
} |
||||||
|
if ("casValidateUrl".equals(nodeName)) { |
||||||
|
CAS_VALIDATE_URL = StringUtils.trim(reader.getElementValue()); |
||||||
|
} |
||||||
|
if ("casClientServerName".equals(nodeName)) { |
||||||
|
CAS_SERVER_NAME = StringUtils.trim(reader.getElementValue()); |
||||||
|
} |
||||||
|
if ("roleValidateUrl".equals(nodeName)) { |
||||||
|
ROLE_VALIDATE_URL = StringUtils.trim(reader.getElementValue()); |
||||||
|
} |
||||||
|
if ("isAuthority".equals(nodeName)) { |
||||||
|
isAuthority = StringUtils.trim(reader.getElementValue()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,229 @@ |
|||||||
|
package com.fr.plugin.jsd9683.controller; |
||||||
|
|
||||||
|
|
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.webservice.CrossDomainResponse; |
||||||
|
import com.fr.decision.webservice.Response; |
||||||
|
import com.fr.decision.webservice.annotation.LoginStatusChecker; |
||||||
|
import com.fr.decision.webservice.bean.user.UserUpdateBean; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.jsd9683.beans.DeleteUserBean; |
||||||
|
import com.fr.plugin.jsd9683.beans.ReportFileBean; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.third.springframework.stereotype.Controller; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.*; |
||||||
|
import com.fr.web.JSONReportUtils; |
||||||
|
|
||||||
|
import com.fr.web.controller.decision.api.auth.LoginResource; |
||||||
|
import com.fr.workspace.WorkContext; |
||||||
|
|
||||||
|
import org.apache.catalina.filters.CorsFilter; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.File; |
||||||
|
import java.io.UnsupportedEncodingException; |
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
@Controller |
||||||
|
@LoginStatusChecker( |
||||||
|
required = false |
||||||
|
) |
||||||
|
public class Jsd9683Controller { |
||||||
|
|
||||||
|
@RequestMapping( |
||||||
|
value = {"/bg/deleteUserByOrgCodeAndName"}, |
||||||
|
method = {RequestMethod.POST} |
||||||
|
) |
||||||
|
@ResponseBody |
||||||
|
public Response deleteUserByName(HttpServletRequest req, HttpServletResponse res, @RequestBody DeleteUserBean deleteUserBean ) throws Exception { |
||||||
|
FineLoggerFactory.getLogger().info("delete user by post................"); |
||||||
|
String X_Access_Token = req.getHeader("X-Access-Token"); |
||||||
|
FineLoggerFactory.getLogger().info("X-Access-Token:"+X_Access_Token); |
||||||
|
Response response = deleteUserByUserNameAndOrgCode(deleteUserBean.getUserName(),deleteUserBean.getOrgCode()); |
||||||
|
return response; |
||||||
|
} |
||||||
|
|
||||||
|
@RequestMapping( |
||||||
|
value = {"/bg/deleteUserByOrgCodeAndName1"}, |
||||||
|
method = {RequestMethod.GET} |
||||||
|
) |
||||||
|
@ResponseBody |
||||||
|
public Response deleteUserByNameByGet(HttpServletRequest req, HttpServletResponse res, @RequestParam("userName") String userName,@RequestParam("orgCode") String orgCode) throws Exception { |
||||||
|
FineLoggerFactory.getLogger().info("delete user by get................"); |
||||||
|
res.setHeader("Access-Control-Allow-Origin", "*"); |
||||||
|
String X_Access_Token = req.getHeader("X-Access-Token"); |
||||||
|
FineLoggerFactory.getLogger().info("X-Access-Token:"+X_Access_Token); |
||||||
|
Response response = deleteUserByUserNameAndOrgCode(userName,orgCode); |
||||||
|
// return CrossDomainResponse.create().callbackFuncName(callback).parameter("result", "ok").parameter("status", "success").createCrossDomainResponse();
|
||||||
|
return response; |
||||||
|
} |
||||||
|
|
||||||
|
@RequestMapping( |
||||||
|
value = {"/bg/deleteUserByOrgCodeAndName2"}, |
||||||
|
method = {RequestMethod.GET} |
||||||
|
) |
||||||
|
@ResponseBody |
||||||
|
public String deleteUserByNameByJSONP(HttpServletRequest req, HttpServletResponse res, @RequestParam("userName") String userName,@RequestParam("orgCode") String orgCode,@RequestParam(value = "callback",required = false,defaultValue = "callback") String callback) throws Exception { |
||||||
|
FineLoggerFactory.getLogger().info("delete user by jsonp................"); |
||||||
|
String X_Access_Token = req.getHeader("X-Access-Token"); |
||||||
|
//获取不到,JSONP不支持在header中加入自定义属性
|
||||||
|
FineLoggerFactory.getLogger().info("X-Access-Token:"+X_Access_Token); |
||||||
|
FineLoggerFactory.getLogger().info("==== deleteUserByName userName:"+userName); |
||||||
|
FineLoggerFactory.getLogger().info("==== deleteUserByName orgCode:"+orgCode); |
||||||
|
String fineUserName = orgCode + "_" +userName; |
||||||
|
User user = UserService.getInstance().getUserByUserName(fineUserName); |
||||||
|
if(user == null){ |
||||||
|
return (new CrossDomainResponse()).callbackFuncName(callback).parameter("status", "fail").parameter("errorCode", "0001").parameter("errorMsg", "user is not exist").createCrossDomainResponse(); |
||||||
|
} |
||||||
|
UserUpdateBean deleteBean = new UserUpdateBean(); |
||||||
|
String[] removeIds = new String[1]; |
||||||
|
removeIds[0] = user.getId(); |
||||||
|
deleteBean.setRemoveUserIds(removeIds);//删除登录用户
|
||||||
|
UserService.getInstance().deleteUsers(deleteBean); |
||||||
|
return CrossDomainResponse.create().callbackFuncName(callback).parameter("message", "ok").parameter("status", "success").createCrossDomainResponse(); |
||||||
|
} |
||||||
|
|
||||||
|
private Response deleteUserByUserNameAndOrgCode(String userName,String orgCode) throws Exception { |
||||||
|
FineLoggerFactory.getLogger().info("==== deleteUserByName userName:"+userName); |
||||||
|
FineLoggerFactory.getLogger().info("==== deleteUserByName orgCode:"+orgCode); |
||||||
|
String fineUserName = orgCode + "_" +userName; |
||||||
|
User user = UserService.getInstance().getUserByUserName(fineUserName); |
||||||
|
if(user == null){ |
||||||
|
return Response.error("0001","user is not exist"); |
||||||
|
// return (new CrossDomainResponse()).callbackFuncName(callback).parameter("status", "fail").parameter("errorCode", "0001").parameter("errorMsg", "user is not exist").createCrossDomainResponse();
|
||||||
|
} |
||||||
|
UserUpdateBean deleteBean = new UserUpdateBean(); |
||||||
|
String[] removeIds = new String[1]; |
||||||
|
removeIds[0] = user.getId(); |
||||||
|
deleteBean.setRemoveUserIds(removeIds);//删除登录用户
|
||||||
|
UserService.getInstance().deleteUsers(deleteBean); |
||||||
|
return Response.ok("ok"); |
||||||
|
} |
||||||
|
|
||||||
|
//@RequestParam(value = "callback",required = false,defaultValue = "callback") String callback
|
||||||
|
@RequestMapping( |
||||||
|
value = {"/bg/getReportDirList"}, |
||||||
|
method = {RequestMethod.GET} |
||||||
|
) |
||||||
|
@ResponseBody |
||||||
|
public Response getReportDirList(HttpServletRequest req, HttpServletResponse res, @RequestParam("name") String name) throws Exception { |
||||||
|
|
||||||
|
String envPath = WorkContext.getCurrent().getPath(); |
||||||
|
FineLoggerFactory.getLogger().info("envPath:" + envPath); |
||||||
|
String webReport = (new File(envPath)).getParent(); |
||||||
|
FineLoggerFactory.getLogger().info("webReport:" + webReport); |
||||||
|
String basePath = webReport + File.separator + "WEB-INF" + File.separator + "reportlets" + File.separator; |
||||||
|
File reportDir = new File(basePath); |
||||||
|
ArrayList<ReportFileBean> allFiles = new ArrayList<>(); |
||||||
|
ArrayList<ReportFileBean> allReportFile = new ArrayList<>(); |
||||||
|
if (reportDir.exists()) { |
||||||
|
try { |
||||||
|
iterateDir(reportDir, allReportFile, basePath, name); |
||||||
|
} catch (UnsupportedEncodingException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
ReportFileBean root = new ReportFileBean(); |
||||||
|
root.setDir(true); |
||||||
|
root.setPreviewUrl(""); |
||||||
|
root.setChildren(new ArrayList<>()); |
||||||
|
root.setPath(""); |
||||||
|
root.setName("root"); |
||||||
|
|
||||||
|
if (allReportFile.size() > 0) { |
||||||
|
for (ReportFileBean node : allReportFile) { |
||||||
|
String path = node.getPath(); |
||||||
|
FineLoggerFactory.getLogger().info("==== path:" + path); |
||||||
|
if (path.indexOf(File.separator) == -1 ) { //根目录的文件
|
||||||
|
root.getChildren().add(node); |
||||||
|
} else { |
||||||
|
String[] pathStrings = path.split("\\"+File.separator); |
||||||
|
ReportFileBean childNode = new ReportFileBean(); |
||||||
|
ReportFileBean parent = null; |
||||||
|
String currentPath = ""; |
||||||
|
for (int i = 0; i < pathStrings.length; i++) { |
||||||
|
String fileName = pathStrings[i]; |
||||||
|
currentPath+= (File.separator+fileName); |
||||||
|
|
||||||
|
if (fileName.indexOf(".cpt") != -1 || fileName.indexOf(".frm") != -1) { |
||||||
|
parent = getChildNode(parent.getChildren(), fileName); |
||||||
|
parent.setDir(false); |
||||||
|
parent.setPath(path); |
||||||
|
parent.setPreviewUrl(node.getPreviewUrl()); |
||||||
|
} else { |
||||||
|
if (i == 0) { |
||||||
|
parent = getChildNode(root.getChildren(), fileName); |
||||||
|
parent.setDir(true); |
||||||
|
parent.setPath(currentPath); |
||||||
|
parent.setPreviewUrl(""); |
||||||
|
} else { |
||||||
|
parent = getChildNode(parent.getChildren(), fileName); |
||||||
|
parent.setDir(true); |
||||||
|
parent.setPath(currentPath); |
||||||
|
parent.setPreviewUrl(""); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//String result = JSONReportUtils.objToJSONString(root);
|
||||||
|
// FineLoggerFactory.getLogger().info("==== result:" + result);
|
||||||
|
// return CrossDomainResponse.create().callbackFuncName(callback).parameter("result",result).createCrossDomainResponse();
|
||||||
|
return Response.ok(root); |
||||||
|
} |
||||||
|
|
||||||
|
private ReportFileBean getChildNode(ArrayList<ReportFileBean> clildren,String name){ |
||||||
|
for(ReportFileBean node : clildren){ |
||||||
|
if(node.getName().equals(name)){ |
||||||
|
return node; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
ReportFileBean child = new ReportFileBean(); |
||||||
|
clildren.add(child); |
||||||
|
child.setName(name); |
||||||
|
child.setChildren(new ArrayList<>()); |
||||||
|
|
||||||
|
return child; |
||||||
|
} |
||||||
|
|
||||||
|
private void iterateDir(File parent,ArrayList<ReportFileBean> allReportFile,String basePath,String paramName) throws UnsupportedEncodingException { |
||||||
|
File[] childrens = parent.listFiles(); |
||||||
|
if(childrens != null && childrens.length > 0){ |
||||||
|
for(File f:childrens){ |
||||||
|
String reportName = f.getName(); |
||||||
|
ReportFileBean bean = new ReportFileBean(); |
||||||
|
bean.setChildren(new ArrayList<>()); |
||||||
|
boolean isAdd = true; |
||||||
|
if(StringUtils.isNotEmpty(paramName)){ |
||||||
|
if(reportName.indexOf(paramName) == -1){ |
||||||
|
isAdd = false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if(isAdd){ |
||||||
|
|
||||||
|
bean.setName(reportName); |
||||||
|
String abPath = f.getAbsolutePath(); |
||||||
|
String rePath = abPath.replace(basePath,""); |
||||||
|
bean.setPath(rePath); |
||||||
|
bean.setDir(f.isDirectory()); |
||||||
|
if(bean.isDir() == false){ |
||||||
|
allReportFile.add(bean); |
||||||
|
bean.setPreviewUrl("webroot/decision//view/report?viewlet="+ java.net.URLEncoder.encode(rePath, "UTF-8")); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
iterateDir(f,allReportFile,basePath,paramName); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package com.fr.plugin.jsd9683.controller; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractControllerRegisterProvider; |
||||||
|
|
||||||
|
public class Jsd9683ControllerProvider extends AbstractControllerRegisterProvider { |
||||||
|
@Override |
||||||
|
public Class<?>[] getControllers() { |
||||||
|
return new Class[]{ |
||||||
|
Jsd9683Controller.class |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package com.fr.plugin.jsd9683.filter; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.jsd9683.conf.Jsd9683ConfigXmlConfigReader; |
||||||
|
import edu.yale.its.tp.cas.client.filter.CASFilter; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class CasFilter extends AbstractGlobalRequestFilterProvider { |
||||||
|
@Override |
||||||
|
public String filterName() { |
||||||
|
return "casFilter11"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String[] urlPatterns() { |
||||||
|
return new String[]{ |
||||||
|
"/decision/view/*", |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public String externalFilterClassName() { |
||||||
|
|
||||||
|
FineLoggerFactory.getLogger().info("isAuthority:"+Jsd9683ConfigXmlConfigReader.isAuthority); |
||||||
|
if(Jsd9683ConfigXmlConfigReader.isAuthority.equals("true")){ |
||||||
|
FineLoggerFactory.getLogger().info("registe com.fr.plugin.jsd9683.servletfilter.CasServeltFilter................."); |
||||||
|
return "edu.yale.its.tp.cas.client.filter.CASFilter"; |
||||||
|
} |
||||||
|
else{ |
||||||
|
FineLoggerFactory.getLogger().info("registe com.fr.plugin.jsd9683.filter.NoFilter................."); |
||||||
|
return "com.fr.plugin.jsd9683.filter.NoFilter"; |
||||||
|
} |
||||||
|
// return "com.fr.plugin.jsd9683.servletfilter.CasServeltFilter";
|
||||||
|
} |
||||||
|
|
||||||
|
public Map<String, String> initializationParameters() { |
||||||
|
HashMap<String,String> paramMap = new HashMap<>(); |
||||||
|
paramMap.put("edu.yale.its.tp.cas.client.filter.validateUrl", Jsd9683ConfigXmlConfigReader.CAS_VALIDATE_URL); |
||||||
|
paramMap.put("edu.yale.its.tp.cas.client.filter.loginUrl",Jsd9683ConfigXmlConfigReader.CAS_LOGIN_URL); |
||||||
|
paramMap.put("edu.yale.its.tp.cas.client.filter.serverName",Jsd9683ConfigXmlConfigReader.CAS_SERVER_NAME); |
||||||
|
FineLoggerFactory.getLogger().info("init casFilter参数................."); |
||||||
|
return paramMap; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,373 @@ |
|||||||
|
package com.fr.plugin.jsd9683.filter; |
||||||
|
|
||||||
|
import com.fr.data.NetworkHelper; |
||||||
|
import com.fr.decision.authority.data.User; |
||||||
|
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
||||||
|
import com.fr.decision.mobile.terminal.TerminalHandler; |
||||||
|
import com.fr.decision.webservice.bean.user.UserBean; |
||||||
|
import com.fr.decision.webservice.utils.DecisionServiceConstants; |
||||||
|
import com.fr.decision.webservice.utils.WebServiceUtils; |
||||||
|
import com.fr.decision.webservice.v10.login.LoginService; |
||||||
|
import com.fr.decision.webservice.v10.user.UserService; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.json.JSONParser; |
||||||
|
import com.fr.locale.InterProviderFactory; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.jsd9683.conf.Jsd9683ConfigXmlConfigReader; |
||||||
|
import com.fr.security.JwtUtils; |
||||||
|
import com.fr.security.encryption.transmission.impl.AESTransmissionEncryption; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.web.Device; |
||||||
|
import com.fr.stable.web.SessionProvider; |
||||||
|
import com.fr.third.alibaba.druid.support.json.JSONUtils; |
||||||
|
import com.fr.util.TemplateParser; |
||||||
|
import com.fr.web.core.SessionPoolManager; |
||||||
|
import com.fr.web.core.WidgetSessionIDInfor; |
||||||
|
|
||||||
|
import javax.net.ssl.HttpsURLConnection; |
||||||
|
import javax.servlet.FilterChain; |
||||||
|
import javax.servlet.ServletException; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import javax.servlet.http.HttpSession; |
||||||
|
import java.io.*; |
||||||
|
import java.net.HttpURLConnection; |
||||||
|
import java.net.MalformedURLException; |
||||||
|
import java.net.URL; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.HashMap; |
||||||
|
|
||||||
|
import java.security.cert.CertificateException; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import javax.net.ssl.*; |
||||||
|
|
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
import org.jasig.cas.client.validation.Assertion; |
||||||
|
|
||||||
|
public class Jsd9683Filter extends AbstractGlobalRequestFilterProvider { |
||||||
|
@Override |
||||||
|
public String filterName() { |
||||||
|
return "Jsd9683Filter"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String[] urlPatterns() { |
||||||
|
return new String[]{ |
||||||
|
"/decision/view/report/*", |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void doFilter(HttpServletRequest request, HttpServletResponse res, FilterChain filterChain) { |
||||||
|
String uri = request.getRequestURI(); |
||||||
|
String reqUrl = request.getRequestURL().toString(); |
||||||
|
String ticket = WebUtils.getHTTPRequestParameter(request, "ticket"); |
||||||
|
FineLoggerFactory.getLogger().info("Jsd9683Filter ===============================req coming:" + uri); |
||||||
|
FineLoggerFactory.getLogger().info("===============================req coming:" + reqUrl); |
||||||
|
FineLoggerFactory.getLogger().info("===============================[ticket]:" + ticket); |
||||||
|
if (StringUtils.isNotEmpty(ticket)) { |
||||||
|
FineLoggerFactory.getLogger().info("===============================只有ticket有值才处理" ); |
||||||
|
String queryString = request.getQueryString(); |
||||||
|
String http = "http"; |
||||||
|
if (reqUrl.indexOf("https") != -1) { |
||||||
|
http = "https"; |
||||||
|
} |
||||||
|
reqUrl = reqUrl.replace(uri, ""); |
||||||
|
if (reqUrl.indexOf(":") == -1) { |
||||||
|
reqUrl = reqUrl + ":" + request.getLocalPort() + uri + "?" + queryString; |
||||||
|
} else { |
||||||
|
reqUrl = reqUrl + uri + "?" + queryString; |
||||||
|
} |
||||||
|
|
||||||
|
// if(reqUrl.indexOf("?ticket") != -1){
|
||||||
|
// reqUrl = reqUrl.replace("?ticket","&ticket");
|
||||||
|
// }
|
||||||
|
|
||||||
|
String proxyValidate = Jsd9683ConfigXmlConfigReader.CAS_VALIDATE_URL + "?service=" + reqUrl; |
||||||
|
FineLoggerFactory.getLogger().info("================ sendRedirect url:" + proxyValidate); |
||||||
|
|
||||||
|
String result = doHttpReq(proxyValidate, "GET"); |
||||||
|
FineLoggerFactory.getLogger().info("sendRedirect url result is :" + result); |
||||||
|
if (result.indexOf("authenticationSuccess") != -1) { |
||||||
|
String beginTag = "<cas:user>"; |
||||||
|
String endTag = "</cas:user>"; |
||||||
|
int beginIndex = result.indexOf(beginTag) + beginTag.length(); |
||||||
|
int endIndex = result.indexOf(endTag); |
||||||
|
String userName = result.substring(beginIndex, endIndex); |
||||||
|
|
||||||
|
beginTag = "<cas:sid>"; |
||||||
|
endTag = "</cas:sid>"; |
||||||
|
beginIndex = result.indexOf(beginTag) + beginTag.length(); |
||||||
|
endIndex = result.indexOf(endTag); |
||||||
|
String sid = result.substring(beginIndex, endIndex); |
||||||
|
|
||||||
|
beginTag = "<cas:orgCode>"; |
||||||
|
endTag = "</cas:orgCode>"; |
||||||
|
beginIndex = result.indexOf(beginTag) + beginTag.length(); |
||||||
|
endIndex = result.indexOf(endTag); |
||||||
|
String orgCode = result.substring(beginIndex, endIndex); |
||||||
|
|
||||||
|
FineLoggerFactory.getLogger().info("================ userName:" + userName + ",sid:" + sid + ",orgCode:" + orgCode); |
||||||
|
String fineUserName = orgCode + "_" + userName; |
||||||
|
|
||||||
|
String templateId = getTemplateId(request); |
||||||
|
FineLoggerFactory.getLogger().info("templateId:" + templateId); |
||||||
|
if (StringUtils.isNotEmpty(templateId)) { |
||||||
|
|
||||||
|
String parentSessionId = getParentSeeesionFromSession(request); |
||||||
|
FineLoggerFactory.getLogger().info("parentSessionId:" + parentSessionId); |
||||||
|
if (StringUtils.isNotEmpty(parentSessionId)) { |
||||||
|
FineLoggerFactory.getLogger().info("child link template...."); |
||||||
|
//ReportSessionIDInfor,FormSessionIDInfor
|
||||||
|
templateId = ""; |
||||||
|
WidgetSessionIDInfor objSession = SessionPoolManager.getSessionIDInfor(parentSessionId, WidgetSessionIDInfor.class); |
||||||
|
if (objSession != null) { |
||||||
|
String parentPath = objSession.getRelativePath(); |
||||||
|
FineLoggerFactory.getLogger().info("child link template is ok....:" + parentPath); |
||||||
|
templateId = parentPath; |
||||||
|
} |
||||||
|
} |
||||||
|
FineLoggerFactory.getLogger().info("templateId:" + templateId); |
||||||
|
if (StringUtils.isNotEmpty(templateId)) { |
||||||
|
//去远程看有权限没,y有就继续走,
|
||||||
|
|
||||||
|
FineLoggerFactory.getLogger().info("===========role validatee url:" + Jsd9683ConfigXmlConfigReader.ROLE_VALIDATE_URL); |
||||||
|
|
||||||
|
JSONObject jsonObj = new JSONObject(); |
||||||
|
|
||||||
|
jsonObj.put("org_code", orgCode); |
||||||
|
jsonObj.put("account", userName); |
||||||
|
jsonObj.put("report_code", templateId); |
||||||
|
jsonObj.put("root_report_code", templateId); |
||||||
|
jsonObj.put("params", new JSONObject()); |
||||||
|
String jsonData = jsonObj.toString(); |
||||||
|
FineLoggerFactory.getLogger().info("===========role validatee param:" + jsonData); |
||||||
|
String roleResult = doPostHttpReq(Jsd9683ConfigXmlConfigReader.ROLE_VALIDATE_URL, jsonData); |
||||||
|
FineLoggerFactory.getLogger().info("===========role validatee roleResult:" + roleResult); |
||||||
|
if (roleResult.indexOf("true") != -1) { |
||||||
|
|
||||||
|
try { |
||||||
|
User user = UserService.getInstance().getUserByUserName(fineUserName); |
||||||
|
if (user == null) { |
||||||
|
UserBean userBean = new UserBean(); |
||||||
|
userBean.setRealName(fineUserName); |
||||||
|
userBean.setUsername(fineUserName); |
||||||
|
userBean.setPassword(AESTransmissionEncryption.getInstance().encrypt("123456")); |
||||||
|
userBean.setEmail(""); |
||||||
|
userBean.setMobile(""); |
||||||
|
userBean.setRoleIds(new String[]{}); |
||||||
|
userBean.setCreationType(0); |
||||||
|
userBean.setEnable(true); |
||||||
|
userBean.setDepartmentPostIds(new ArrayList<>()); |
||||||
|
userBean.setExtraAttribute(new HashMap<>()); |
||||||
|
UserService.getInstance().addUser(userBean); |
||||||
|
FineLoggerFactory.getLogger().info("add user:" + fineUserName); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
HttpSession session = request.getSession(true); |
||||||
|
try { |
||||||
|
FineLoggerFactory.getLogger().info("begin login..."); |
||||||
|
login(request, res, session, fineUserName); |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
filterChain.doFilter(request, res); |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} catch (ServletException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} else { |
||||||
|
FineLoggerFactory.getLogger().info("无权限访问"); |
||||||
|
try { |
||||||
|
FineLoggerFactory.getLogger().info("到无权限界面去了"); |
||||||
|
PrintWriter printWriter = null; |
||||||
|
|
||||||
|
printWriter = WebUtils.createPrintWriter(res); |
||||||
|
|
||||||
|
Map<String, Object> map = new HashMap<>(); |
||||||
|
map.put("result", InterProviderFactory.getProvider().getLocText("Fine-Engine_Error_Page_Result")); |
||||||
|
map.put("reason", "您没有权限访问该报表页面"); |
||||||
|
map.put("solution", InterProviderFactory.getProvider().getLocText("Fine-Engine_Please_Contact_Platform_Admin")); |
||||||
|
String page = WebServiceUtils.parseWebPageResourceSafe("com/fr/plugin/jsd9683/jscss/unavaliable.html", map); |
||||||
|
printWriter.write(page); |
||||||
|
printWriter.flush(); |
||||||
|
printWriter.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} else { |
||||||
|
try { |
||||||
|
FineLoggerFactory.getLogger().info("===================== error:go on"); |
||||||
|
filterChain.doFilter(request, res); |
||||||
|
} catch (IOException e) { |
||||||
|
FineLoggerFactory.getLogger().info("===================== error:" + e.toString()); |
||||||
|
e.printStackTrace(); |
||||||
|
} catch (ServletException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
FineLoggerFactory.getLogger().info("===================== error:" + e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} else { |
||||||
|
try { |
||||||
|
FineLoggerFactory.getLogger().info("===================== normal:go on"); |
||||||
|
filterChain.doFilter(request, res); |
||||||
|
} catch (IOException e) { |
||||||
|
FineLoggerFactory.getLogger().info("===================== error:" + e.toString()); |
||||||
|
e.printStackTrace(); |
||||||
|
} catch (ServletException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
FineLoggerFactory.getLogger().info("===================== error:" + e.toString()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private String doHttpReq(String reqUrl, String methord) { |
||||||
|
HttpURLConnection con = null; |
||||||
|
BufferedReader buffer = null; |
||||||
|
StringBuffer resultBuffer = null; |
||||||
|
String result = ""; |
||||||
|
try { |
||||||
|
URL url = new URL(reqUrl); |
||||||
|
|
||||||
|
con = (HttpURLConnection) url.openConnection(); |
||||||
|
|
||||||
|
con.setRequestMethod(methord); |
||||||
|
|
||||||
|
//con.setRequestProperty("Content-Type", "application/json;charset=GBK");
|
||||||
|
|
||||||
|
con.setDoOutput(true); |
||||||
|
|
||||||
|
con.setDoInput(true); |
||||||
|
|
||||||
|
con.setUseCaches(false); |
||||||
|
|
||||||
|
int responseCode = con.getResponseCode(); |
||||||
|
FineLoggerFactory.getLogger().info("sendRedirect responseCode:" + responseCode); |
||||||
|
if (responseCode == HttpURLConnection.HTTP_OK) { |
||||||
|
|
||||||
|
InputStream inputStream = con.getInputStream(); |
||||||
|
|
||||||
|
resultBuffer = new StringBuffer(); |
||||||
|
String line; |
||||||
|
buffer = new BufferedReader(new InputStreamReader(inputStream, "GBK")); |
||||||
|
while ((line = buffer.readLine()) != null) { |
||||||
|
resultBuffer.append(line); |
||||||
|
} |
||||||
|
result = resultBuffer.toString(); |
||||||
|
|
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
private String doPostHttpReq(String reqUrl, String jsonData) { |
||||||
|
HttpURLConnection con = null; |
||||||
|
BufferedReader buffer = null; |
||||||
|
StringBuffer resultBuffer = null; |
||||||
|
String result = ""; |
||||||
|
try { |
||||||
|
URL url = new URL(reqUrl); |
||||||
|
// 得到连接对象
|
||||||
|
con = (HttpURLConnection) url.openConnection(); |
||||||
|
// 设置请求类型
|
||||||
|
con.setRequestMethod("POST"); |
||||||
|
|
||||||
|
con.setRequestProperty("Content-Type", "application/json;charset=utf-8"); |
||||||
|
|
||||||
|
|
||||||
|
con.setDoOutput(true); |
||||||
|
|
||||||
|
con.setDoInput(true); |
||||||
|
|
||||||
|
con.setUseCaches(false); |
||||||
|
con.connect(); |
||||||
|
|
||||||
|
String body = jsonData; |
||||||
|
|
||||||
|
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(con.getOutputStream(), "UTF-8")); |
||||||
|
writer.write(body); |
||||||
|
writer.close(); |
||||||
|
|
||||||
|
|
||||||
|
int responseCode = con.getResponseCode(); |
||||||
|
FineLoggerFactory.getLogger().info("sendRedirect responseCode:" + responseCode); |
||||||
|
if (responseCode == HttpURLConnection.HTTP_OK) { |
||||||
|
|
||||||
|
InputStream inputStream = con.getInputStream(); |
||||||
|
|
||||||
|
resultBuffer = new StringBuffer(); |
||||||
|
String line; |
||||||
|
buffer = new BufferedReader(new InputStreamReader(inputStream, "GBK")); |
||||||
|
while ((line = buffer.readLine()) != null) { |
||||||
|
resultBuffer.append(line); |
||||||
|
} |
||||||
|
result = resultBuffer.toString(); |
||||||
|
|
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private void login(HttpServletRequest req, HttpServletResponse res, HttpSession session, String username) throws Exception { |
||||||
|
// String token = LoginService.getInstance().login(req, res, username);
|
||||||
|
// req.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME, token);
|
||||||
|
// FineLoggerFactory.getLogger().info("fr FrFilter is over with username is ###" + username);
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private static String getParentSeeesionFromSession(HttpServletRequest request) { |
||||||
|
return NetworkHelper.getHTTPRequestParameter(request, "parentSeeesion"); |
||||||
|
} |
||||||
|
|
||||||
|
public String getTemplateId(HttpServletRequest request) { |
||||||
|
return TemplateParser.analyzeTemplateID(request); |
||||||
|
} |
||||||
|
|
||||||
|
private static String getHyperLinkTemplateIdFromSession(HttpServletRequest request) { |
||||||
|
SessionProvider session = getSessionFromRequest(request); |
||||||
|
return session != null ? session.getRelativePath() : ""; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private static SessionProvider getSessionFromRequest(HttpServletRequest request) { |
||||||
|
try { |
||||||
|
String sessionId = NetworkHelper.getHTTPRequestParameter(request, "sessionID"); |
||||||
|
if (StringUtils.isNotEmpty(sessionId)) { |
||||||
|
return SessionPoolManager.getSessionIDInfor(sessionId, SessionProvider.class); |
||||||
|
} |
||||||
|
} catch (Exception var2) { |
||||||
|
FineLoggerFactory.getLogger().error(var2.getMessage(), var2); |
||||||
|
} |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package com.fr.plugin.jsd9683.filter; |
||||||
|
|
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.plugin.jsd9683.conf.Jsd9683ConfigXmlConfigReader; |
||||||
|
|
||||||
|
import javax.servlet.*; |
||||||
|
import java.io.IOException; |
||||||
|
|
||||||
|
public class NoFilter implements Filter { |
||||||
|
@Override |
||||||
|
public void init(FilterConfig filterConfig) throws ServletException { |
||||||
|
FineLoggerFactory.getLogger().info("============= NoFilter init.。。。。。。。。。。。。。。 "); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { |
||||||
|
FineLoggerFactory.getLogger().info("============= NoFilter go go go "); |
||||||
|
|
||||||
|
filterChain.doFilter(servletRequest,servletResponse); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void destroy() { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,60 @@ |
|||||||
|
package com.fr.plugin.jsd9683.filter; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.servlet.FilterChain; |
||||||
|
import javax.servlet.ServletException; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.IOException; |
||||||
|
|
||||||
|
public class RequestGlobalFilter extends AbstractGlobalRequestFilterProvider { |
||||||
|
@Override |
||||||
|
public String filterName() { |
||||||
|
return "RequestGlobalFilter"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String[] urlPatterns() { |
||||||
|
return new String[]{ |
||||||
|
"/decision/*", |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { |
||||||
|
|
||||||
|
FineLoggerFactory.getLogger().info("===============================RequestGlobalFilter:" ); |
||||||
|
String origin = req.getHeader("Origin"); |
||||||
|
FineLoggerFactory.getLogger().info("===============================origin:" +origin); |
||||||
|
if (StringUtils.isNotEmpty(origin)) { |
||||||
|
res.addHeader("Access-Control-Allow-Origin", origin); |
||||||
|
String headers = req.getHeader("Access-Control-Request-Headers"); |
||||||
|
FineLoggerFactory.getLogger().info("===============================headers:" +headers); |
||||||
|
if (StringUtils.isNotEmpty(headers)) |
||||||
|
res.addHeader("Access-Control-Allow-Headers", headers); |
||||||
|
|
||||||
|
res.addHeader("Access-Control-Allow-Methods", "*"); |
||||||
|
res.addHeader("Access-Control-Max-Age", "3600"); |
||||||
|
} |
||||||
|
|
||||||
|
String methodName = req.getMethod(); |
||||||
|
FineLoggerFactory.getLogger().info("===============================methodName:" +methodName); |
||||||
|
if (methodName.equals("OPTIONS")) { |
||||||
|
res.setStatus(HttpServletResponse.SC_OK); |
||||||
|
FineLoggerFactory.getLogger().info("options set status ok"); |
||||||
|
} |
||||||
|
else{ |
||||||
|
try { |
||||||
|
FineLoggerFactory.getLogger().info(" ok go on"); |
||||||
|
filterChain.doFilter(req,res); |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} catch (ServletException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.fr.plugin.jsd9683.webResourceProvider; |
||||||
|
|
||||||
|
import com.fr.decision.webservice.interceptor.handler.ReportTemplateRequestChecker; |
||||||
|
import com.fr.decision.webservice.utils.DecisionServiceConstants; |
||||||
|
import com.fr.web.struct.Component; |
||||||
|
import com.fr.web.struct.browser.RequestClient; |
||||||
|
import com.fr.web.struct.category.ScriptPath; |
||||||
|
|
||||||
|
public class Jsd9683WebResourceComponent extends Component { |
||||||
|
|
||||||
|
public static Jsd9683WebResourceComponent KEY = new Jsd9683WebResourceComponent(); |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public ScriptPath script(RequestClient req) { |
||||||
|
|
||||||
|
return ScriptPath.build("/com/fr/plugin/jsd9683/jscss/Jsd9683.js"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package com.fr.plugin.jsd9683.webResourceProvider; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractWebResourceProvider; |
||||||
|
import com.fr.report.web.ReportMainComponent; |
||||||
|
import com.fr.web.struct.Atom; |
||||||
|
|
||||||
|
public class Jsd9683WebResourceProvider extends AbstractWebResourceProvider { |
||||||
|
@Override |
||||||
|
public Atom attach() { |
||||||
|
return ReportMainComponent.KEY; |
||||||
|
} |
||||||
|
|
||||||
|
public Atom client() { |
||||||
|
|
||||||
|
return Jsd9683WebResourceComponent.KEY; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
package com.fr.plugin.jsd9683.webResourceProvider; |
||||||
|
|
||||||
|
import com.fr.data.NetworkHelper; |
||||||
|
import com.fr.decision.webservice.interceptor.DecisionInterceptor; |
||||||
|
import com.fr.decision.webservice.interceptor.handler.TemplateRequestChecker; |
||||||
|
import com.fr.decision.webservice.utils.DecisionServiceConstants; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import com.fr.third.springframework.web.method.HandlerMethod; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
|
||||||
|
public class MyTemplateRequestChecker extends TemplateRequestChecker { |
||||||
|
@Override |
||||||
|
public String getTemplateId(HttpServletRequest httpServletRequest, HandlerMethod handlerMethod) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean detectTemplateNeedAuthenticate(HttpServletRequest httpServletRequest, String s) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean detectTemplateRoleAuthority(HttpServletRequest httpServletRequest, String s, String s1) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean doesUserHaveAnyHyperlinkTempAuth(String s, String s1) throws Exception { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean acceptRequest(HttpServletRequest httpServletRequest, HandlerMethod handlerMethod) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean checkRequest(HttpServletRequest request, HttpServletResponse httpServletResponse, HandlerMethod handlerMethod) throws Exception { |
||||||
|
String hyperlinkUUIDKey = NetworkHelper.getHTTPRequestParameter(request, DecisionServiceConstants.FINE_AUTH_TOKEN_NAME_HYPERLINK); |
||||||
|
FineLoggerFactory.getLogger().info("hyperlinkUUIDKey:" + hyperlinkUUIDKey); |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int toInteger() { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
; (function () { |
||||||
|
console.log("加载插件jsd9683...") |
||||||
|
|
||||||
|
function getReportSessionID() { |
||||||
|
if (FR && FR.SessionMgr && $.isFunction(FR.SessionMgr.getSessionID)) { |
||||||
|
return FR.SessionMgr.getSessionID(); |
||||||
|
} |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
var doHyperlinkByGet4Reportlet = FR.doHyperlinkByGet4Reportlet |
||||||
|
|
||||||
|
var newDoHyperlinkByGet4Reportlet = function(url, para, target, feature, title) { |
||||||
|
console.log("hack newDoHyperlinkByGet4Reportlet") |
||||||
|
var url = url.url+'&parentSeeesion='+getReportSessionID(); |
||||||
|
console.log("跳转url:"+url) |
||||||
|
doHyperlinkByGet4Reportlet.apply(FR,[url,para,target,feature,title]); |
||||||
|
} |
||||||
|
|
||||||
|
FR.doHyperlinkByGet4Reportlet = newDoHyperlinkByGet4Reportlet; |
||||||
|
|
||||||
|
var doHyperlinkByPost = FR.doHyperlinkByPost |
||||||
|
var newDoHyperlinkByPost = function(url, para, target, feature, title) { |
||||||
|
console.log("hack newDoHyperlinkByGet4Reportlet") |
||||||
|
var url = url.url+'&parentSeeesion='+getReportSessionID(); |
||||||
|
console.log("跳转url:"+url) |
||||||
|
doHyperlinkByPost.apply(FR,[url,para,target,feature,title]); |
||||||
|
} |
||||||
|
FR.doHyperlinkByPost = newDoHyperlinkByPost; |
||||||
|
})(); |
@ -0,0 +1,81 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="utf-8"> |
||||||
|
<title></title> |
||||||
|
<style> |
||||||
|
body { |
||||||
|
background-color: #ffffff; |
||||||
|
} |
||||||
|
|
||||||
|
.main { |
||||||
|
position: absolute; |
||||||
|
top: 25%; |
||||||
|
left: 10%; |
||||||
|
right: 10%; |
||||||
|
margin: auto; |
||||||
|
} |
||||||
|
|
||||||
|
.main div { |
||||||
|
text-align: center; |
||||||
|
} |
||||||
|
|
||||||
|
#header-content { |
||||||
|
min-width: 40%; |
||||||
|
min-height: 40%; |
||||||
|
max-width: 100%; |
||||||
|
max-height: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
.simple-message { |
||||||
|
font-weight: 500; |
||||||
|
width: 100%; |
||||||
|
font-size: 28px; |
||||||
|
color: #3685f2; |
||||||
|
text-align: center; |
||||||
|
margin-top: 20px; |
||||||
|
line-height: 40px; |
||||||
|
} |
||||||
|
|
||||||
|
.detail-message { |
||||||
|
font-size: 16px; |
||||||
|
color: #ff4949; |
||||||
|
margin: 15px auto; |
||||||
|
line-height: 24px; |
||||||
|
} |
||||||
|
|
||||||
|
.solution { |
||||||
|
font-size: 16px; |
||||||
|
color: #ff4949; |
||||||
|
line-height: 24px; |
||||||
|
} |
||||||
|
|
||||||
|
.login { |
||||||
|
color: #3685f2; |
||||||
|
text-decoration: none; |
||||||
|
line-height: 24px; |
||||||
|
float: right; |
||||||
|
height: 24px; |
||||||
|
font-size: 12px; |
||||||
|
margin-right: 40px; |
||||||
|
margin-top: 40px; |
||||||
|
} |
||||||
|
</style> |
||||||
|
<script type="text/javascript" src="${fineServletURL}/file?path=com.fr.decision.web.i18n.NormalTextGenerator&type=class&parser=plain"></script> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<!--<a href="${fineServletURL}/login${origin}" class="login">${switchAccount}</a>--> |
||||||
|
<div class="main" > |
||||||
|
<div> |
||||||
|
|
||||||
|
</div> |
||||||
|
<div class="simple-message" id="simple-message">非常抱歉,无法查看该页面</div> |
||||||
|
<div class="detail-message" id="detail-message">您没有权限访问该报表页面</div> |
||||||
|
<div class="solution" id="solution">如果您确实需要访问该页面,请联系平台管理员</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<script> |
||||||
|
|
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,7 @@ |
|||||||
|
<root> |
||||||
|
<casLoginUrl>http://xxx/login</casLoginUrl> |
||||||
|
<casValidateUrl>http://xxxx/proxyValidate</casValidateUrl> |
||||||
|
<casClientServerName>x.x.x.x:8080</casClientServerName> |
||||||
|
<roleValidateUrl>http://xx/fine_report/report_access_validation</roleValidateUrl> |
||||||
|
<isAuthority>true</isAuthority> |
||||||
|
</root> |
Loading…
Reference in new issue