liunianbo
2 years ago
commit
242c87c15b
18 changed files with 1320 additions and 0 deletions
@ -0,0 +1,135 @@
|
||||
apply plugin: 'java' |
||||
|
||||
|
||||
ext { |
||||
/** |
||||
* 项目中依赖的jar的路径 |
||||
* 1.如果依赖的jar需要打包到zip中,放置在lib根目录下 |
||||
* 2.如果依赖的jar仅仅是编译时需要,防止在lib下子目录下即可 |
||||
*/ |
||||
libPath = "$projectDir/../webroot/WEB-INF/lib" |
||||
|
||||
/** |
||||
* 是否对插件的class进行加密保护,防止反编译 |
||||
*/ |
||||
guard = true |
||||
|
||||
def pluginInfo = getPluginInfo() |
||||
pluginPre = "fine-plugin" |
||||
pluginName = pluginInfo.id |
||||
pluginVersion = pluginInfo.version |
||||
|
||||
outputPath = "$projectDir/../webroot/WEB-INF/plugins/plugin-" + pluginName + "-1.0/classes" |
||||
} |
||||
|
||||
group = 'com.fr.plugin' |
||||
version = '11.0' |
||||
sourceCompatibility = '8' |
||||
|
||||
sourceSets { |
||||
main { |
||||
java.outputDir = file(outputPath) |
||||
output.resourcesDir = file(outputPath) |
||||
} |
||||
} |
||||
|
||||
ant.importBuild("encrypt.xml") |
||||
//定义ant变量 |
||||
ant.projectDir = projectDir |
||||
ant.references["compile.classpath"] = ant.path { |
||||
fileset(dir: libPath, includes: '**/*.jar') |
||||
fileset(dir: ".", includes: "**/*.jar") |
||||
} |
||||
|
||||
tasks.withType(JavaCompile) { |
||||
options.encoding = "UTF-8" |
||||
} |
||||
|
||||
classes.dependsOn('clean') |
||||
|
||||
task copyFiles(type: Copy, dependsOn: 'classes') { |
||||
from outputPath |
||||
into "$projectDir/classes" |
||||
} |
||||
|
||||
task preJar(type: Copy, dependsOn: guard ? 'compile_encrypt_javas' : 'compile_plain_javas') { |
||||
from "$projectDir/classes" |
||||
into "$projectDir/transform-classes" |
||||
include "**/*.*" |
||||
} |
||||
jar.dependsOn("preJar") |
||||
classes.dependsOn("copyPluginXML") |
||||
|
||||
task copyPluginXML(type: Copy) { |
||||
print "copyed plugin.xml file" |
||||
from "$projectDir/plugin.xml" |
||||
into file("$projectDir/../webroot/WEB-INF/plugins/plugin-" + pluginName + "-1.0/") |
||||
} |
||||
task makeJar(type: Jar, dependsOn: preJar) { |
||||
delete file("$projectDir/classes") |
||||
delete file("$projectDir/transform-classes") |
||||
from fileTree(dir: "$projectDir/transform-classes") |
||||
baseName pluginPre |
||||
appendix pluginName |
||||
version pluginVersion |
||||
destinationDir = file("$buildDir/libs") |
||||
|
||||
doLast() { |
||||
delete file("$projectDir/classes") |
||||
delete file("$projectDir/transform-classes") |
||||
} |
||||
} |
||||
|
||||
task copyFile(type: Copy, dependsOn: ["makeJar"]) { |
||||
from "$buildDir/libs" |
||||
from("$projectDir/lib") { |
||||
include "*.jar" |
||||
} |
||||
from "$projectDir/plugin.xml" |
||||
into file("$buildDir/temp/plugin") |
||||
} |
||||
|
||||
task zip(type: Zip, dependsOn: ["copyFile"]) { |
||||
from "$buildDir/temp/plugin" |
||||
destinationDir file("$buildDir/install") |
||||
baseName pluginPre |
||||
appendix pluginName |
||||
version pluginVersion |
||||
} |
||||
|
||||
//控制build时包含哪些文件,排除哪些文件 |
||||
processResources { |
||||
// exclude everything |
||||
// 用*.css没效果 |
||||
// exclude '**/*.css' |
||||
// except this file |
||||
// include 'xx.xml' |
||||
} |
||||
|
||||
/*读取plugin.xml中的version*/ |
||||
|
||||
def getPluginInfo() { |
||||
def xmlFile = file("plugin.xml") |
||||
if (!xmlFile.exists()) { |
||||
return ["id": "none", "version": "1.0.0"] |
||||
} |
||||
def plugin = new XmlParser().parse(xmlFile) |
||||
def version = plugin.version[0].text() |
||||
def id = plugin.id[0].text() |
||||
return ["id": id, "version": version] |
||||
} |
||||
|
||||
repositories { |
||||
mavenLocal() |
||||
maven { |
||||
url = uri('http://mvn.finedevelop.com/repository/maven-public/') |
||||
} |
||||
} |
||||
|
||||
dependencies { |
||||
implementation 'org.projectlombok:lombok:1.18.20' |
||||
//使用本地jar |
||||
implementation fileTree(dir: 'lib', include: ['**/*.jar']) |
||||
implementation fileTree(dir: libPath, include: ['**/*.jar']) |
||||
} |
||||
|
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
<project> |
||||
<target name="compile_encrypt_javas" depends="copyFiles"> |
||||
<echo message="加密文件"/> |
||||
<echo message="${projectDir}"/> |
||||
<taskdef name="pretreatment" classname="com.fr.plugin.pack.PluginPretreatmentTask"> |
||||
<classpath refid="compile.classpath"/> |
||||
</taskdef> |
||||
<pretreatment baseDir="${projectDir}"/> |
||||
</target> |
||||
<target name="compile_plain_javas" depends="copyFiles"> |
||||
</target> |
||||
</project> |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin> |
||||
<id>com.fr.plugin.function.authLogin</id> |
||||
<name><![CDATA[台州银行驾驶舱项目 单点登录及统一身份认证]]></name> |
||||
<active>yes</active> |
||||
<version>1.0</version> |
||||
<env-version>10.0</env-version> |
||||
<jartime>2018-07-31</jartime> |
||||
<vendor>liunb</vendor> |
||||
<description><![CDATA[台州银行驾驶舱项目 单点登录及统一身份认证]]></description> |
||||
<change-notes><![CDATA[ |
||||
[2018-07-31]初始化插件。<br/> |
||||
]]></change-notes> |
||||
|
||||
<!-- 单点登录及统一身份认证拦截器 --> |
||||
<extra-decision> |
||||
<GlobalRequestFilterProvider class="com.fr.plugin.decision.auth.filter.AuthLoginRequestFilter"/> |
||||
<GlobalRequestFilterProvider class="com.fr.plugin.decision.auth.filter.SsoLoginRequestFilter"/> |
||||
</extra-decision> |
||||
|
||||
<!-- 插件功能点 --> |
||||
<function-recorder class="com.fr.plugin.decision.auth.LoginPluginLifecycle"/> |
||||
|
||||
<!-- 插件生命周期声明 --> |
||||
<lifecycle-monitor class="com.fr.plugin.decision.auth.LoginPluginLifecycle"/> |
||||
</plugin> |
@ -0,0 +1,22 @@
|
||||
package com.fr.plugin.decision.auth; |
||||
|
||||
import com.fr.plugin.context.PluginContext; |
||||
import com.fr.plugin.decision.auth.config.AuthLoginPluginConfig; |
||||
import com.fr.plugin.decision.auth.config.SsoLoginPluginConfig; |
||||
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; |
||||
import com.fr.plugin.transform.FunctionRecorder; |
||||
|
||||
@FunctionRecorder |
||||
public class LoginPluginLifecycle extends AbstractPluginLifecycleMonitor { |
||||
|
||||
@Override |
||||
public void afterRun(PluginContext pluginContext) { |
||||
SsoLoginPluginConfig.getInstance(); |
||||
AuthLoginPluginConfig.getInstance(); |
||||
} |
||||
|
||||
@Override |
||||
public void beforeStop(PluginContext pluginContext) { |
||||
|
||||
} |
||||
} |
@ -0,0 +1,61 @@
|
||||
package com.fr.plugin.decision.auth; |
||||
|
||||
import com.fr.plugin.decision.auth.utils.FRUtils; |
||||
|
||||
import javax.servlet.ReadListener; |
||||
import javax.servlet.ServletInputStream; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletRequestWrapper; |
||||
import java.io.BufferedReader; |
||||
import java.io.ByteArrayInputStream; |
||||
import java.io.IOException; |
||||
import java.io.InputStreamReader; |
||||
import java.nio.charset.Charset; |
||||
|
||||
public class RequestReaderHttpServletRequestWrapper extends HttpServletRequestWrapper { |
||||
|
||||
private byte[] body; |
||||
|
||||
public RequestReaderHttpServletRequestWrapper(HttpServletRequest request) throws Exception { |
||||
super(request); |
||||
body = FRUtils.getBodyString(request).getBytes(Charset.forName("UTF-8")); |
||||
} |
||||
|
||||
@Override |
||||
public BufferedReader getReader() throws IOException { |
||||
return new BufferedReader(new InputStreamReader(getInputStream())); |
||||
} |
||||
|
||||
@Override |
||||
public ServletInputStream getInputStream() throws IOException { |
||||
|
||||
final ByteArrayInputStream bais = new ByteArrayInputStream(body); |
||||
|
||||
return new ServletInputStream() { |
||||
|
||||
@Override |
||||
public int read() throws IOException { |
||||
return bais.read(); |
||||
} |
||||
|
||||
@Override |
||||
public boolean isFinished() { |
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isReady() { |
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public void setReadListener(ReadListener readListener) { |
||||
} |
||||
}; |
||||
} |
||||
|
||||
public String getBody() { |
||||
return new String(body, Charset.forName("UTF-8")); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,100 @@
|
||||
package com.fr.plugin.decision.auth.config; |
||||
|
||||
import com.fr.config.*; |
||||
import com.fr.config.holder.Conf; |
||||
import com.fr.config.holder.factory.Holders; |
||||
|
||||
@Visualization(category = "统一身份认证参数配置") |
||||
public class AuthLoginPluginConfig extends DefaultConfiguration { |
||||
|
||||
private static volatile AuthLoginPluginConfig config = null; |
||||
|
||||
public static AuthLoginPluginConfig getInstance() { |
||||
if (config == null) { |
||||
config = ConfigContext.getConfigInstance(AuthLoginPluginConfig.class); |
||||
} |
||||
return config; |
||||
} |
||||
|
||||
@Identifier(value = "serviceCode", name = "服务代码", description = "服务代码", status = Status.SHOW) |
||||
private Conf<String> serviceCode = Holders.simple("11002000002"); |
||||
|
||||
@Identifier(value = "serviceScene", name = "服务场景", description = "服务场景", status = Status.SHOW) |
||||
private Conf<String> serviceScene = Holders.simple("01"); |
||||
|
||||
@Identifier(value = "consumerId", name = "消费系统ID", description = "消费系统ID", status = Status.SHOW) |
||||
private Conf<String> consumerId = Holders.simple("406100"); |
||||
|
||||
@Identifier(value = "consumerSeqNo", name = "消费顺序号码", description = "消费顺序号码", status = Status.SHOW) |
||||
private Conf<String> consumerSeqNo = Holders.simple("01G4HNQ8YQDWQSKAHVSB31A6CQ"); |
||||
|
||||
@Identifier(value = "systemNo", name = "系统编码", description = "系统编码", status = Status.SHOW) |
||||
private Conf<String> systemNo = Holders.simple("bizpm"); |
||||
|
||||
@Identifier(value = "url", name = "请求URL", description = "请求URL", status = Status.SHOW) |
||||
private Conf<String> url = Holders.simple("http://10.1.136.170:11016/BIZPM"); |
||||
|
||||
public String getServiceCode() { |
||||
return serviceCode.get(); |
||||
} |
||||
|
||||
public void setServiceCode(String serviceCode) { |
||||
this.serviceCode.set(serviceCode); |
||||
} |
||||
|
||||
public String getServiceScene() { |
||||
return serviceScene.get(); |
||||
} |
||||
|
||||
public void setServiceScene(String serviceScene) { |
||||
this.serviceScene.set(serviceScene); |
||||
} |
||||
|
||||
public String getConsumerId() { |
||||
return consumerId.get(); |
||||
} |
||||
|
||||
public void setConsumerId(String consumerId) { |
||||
this.consumerId.set(consumerId); |
||||
} |
||||
|
||||
public String getConsumerSeqNo() { |
||||
return consumerSeqNo.get(); |
||||
} |
||||
|
||||
public void setConsumerSeqNo(String consumerSeqNo) { |
||||
this.consumerSeqNo.set(consumerSeqNo); |
||||
} |
||||
|
||||
public String getSystemNo() { |
||||
return systemNo.get(); |
||||
} |
||||
|
||||
public void setSystemNo(String systemNo) { |
||||
this.systemNo.set(systemNo); |
||||
} |
||||
|
||||
public String getUrl() { |
||||
return url.get(); |
||||
} |
||||
|
||||
public void setUrl(String url) { |
||||
this.url.set(url); |
||||
} |
||||
|
||||
@Override |
||||
public Object clone() throws CloneNotSupportedException { |
||||
|
||||
AuthLoginPluginConfig cloned = (AuthLoginPluginConfig) super.clone(); |
||||
|
||||
cloned.serviceCode = (Conf<String>) serviceCode.clone(); |
||||
cloned.serviceScene = (Conf<String>) serviceScene.clone(); |
||||
cloned.consumerId = (Conf<String>) consumerId.clone(); |
||||
cloned.consumerSeqNo = (Conf<String>) consumerSeqNo.clone(); |
||||
cloned.systemNo = (Conf<String>) systemNo.clone(); |
||||
cloned.url = (Conf<String>) url.clone(); |
||||
|
||||
return cloned; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,100 @@
|
||||
package com.fr.plugin.decision.auth.config; |
||||
|
||||
import com.fr.config.*; |
||||
import com.fr.config.holder.Conf; |
||||
import com.fr.config.holder.factory.Holders; |
||||
|
||||
@Visualization(category = "单点登录参数配置") |
||||
public class SsoLoginPluginConfig extends DefaultConfiguration { |
||||
|
||||
private static volatile SsoLoginPluginConfig config = null; |
||||
|
||||
public static SsoLoginPluginConfig getInstance() { |
||||
if (config == null) { |
||||
config = ConfigContext.getConfigInstance(SsoLoginPluginConfig.class); |
||||
} |
||||
return config; |
||||
} |
||||
|
||||
@Identifier(value = "serviceCode", name = "服务代码", description = "服务代码", status = Status.SHOW) |
||||
private Conf<String> serviceCode = Holders.simple("11002000152"); |
||||
|
||||
@Identifier(value = "serviceScene", name = "服务场景", description = "服务场景", status = Status.SHOW) |
||||
private Conf<String> serviceScene = Holders.simple("01"); |
||||
|
||||
@Identifier(value = "consumerId", name = "消费系统ID", description = "消费系统ID", status = Status.SHOW) |
||||
private Conf<String> consumerId = Holders.simple("401020"); |
||||
|
||||
@Identifier(value = "targetSysId", name = "目标系统ID", description = "目标系统ID", status = Status.SHOW) |
||||
private Conf<String> targetSysId = Holders.simple("401020"); |
||||
|
||||
@Identifier(value = "systemNo", name = "系统编码", description = "系统编码", status = Status.SHOW) |
||||
private Conf<String> systemNo = Holders.simple("hr"); |
||||
|
||||
@Identifier(value = "url", name = "请求URL", description = "请求URL", status = Status.SHOW) |
||||
private Conf<String> url = Holders.simple("http://10.1.136.170:11016/BIZPM"); |
||||
|
||||
public String getServiceCode() { |
||||
return serviceCode.get(); |
||||
} |
||||
|
||||
public void setServiceCode(String serviceCode) { |
||||
this.serviceCode.set(serviceCode); |
||||
} |
||||
|
||||
public String getServiceScene() { |
||||
return serviceScene.get(); |
||||
} |
||||
|
||||
public void setServiceScene(String serviceScene) { |
||||
this.serviceScene.set(serviceScene); |
||||
} |
||||
|
||||
public String getConsumerId() { |
||||
return consumerId.get(); |
||||
} |
||||
|
||||
public void setConsumerId(String consumerId) { |
||||
this.consumerId.set(consumerId); |
||||
} |
||||
|
||||
public String getTargetSysId() { |
||||
return targetSysId.get(); |
||||
} |
||||
|
||||
public void setTargetSysId(String targetSysId) { |
||||
this.targetSysId.set(targetSysId); |
||||
} |
||||
|
||||
public String getSystemNo() { |
||||
return systemNo.get(); |
||||
} |
||||
|
||||
public void setSystemNo(String systemNo) { |
||||
this.systemNo.set(systemNo); |
||||
} |
||||
|
||||
public String getUrl() { |
||||
return url.get(); |
||||
} |
||||
|
||||
public void setUrl(String url) { |
||||
this.url.set(url); |
||||
} |
||||
|
||||
@Override |
||||
public Object clone() throws CloneNotSupportedException { |
||||
|
||||
SsoLoginPluginConfig cloned = (SsoLoginPluginConfig) super.clone(); |
||||
|
||||
cloned.serviceCode = (Conf<String>) serviceCode.clone(); |
||||
cloned.serviceScene = (Conf<String>) serviceScene.clone(); |
||||
cloned.consumerId = (Conf<String>) consumerId.clone(); |
||||
cloned.targetSysId = (Conf<String>) targetSysId.clone(); |
||||
cloned.systemNo = (Conf<String>) systemNo.clone(); |
||||
cloned.url = (Conf<String>) url.clone(); |
||||
|
||||
return cloned; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,546 @@
|
||||
package com.fr.plugin.decision.auth.filter; |
||||
|
||||
import Com.Zstar.UUMS.Pub.DesSecurity; |
||||
import com.fr.base.ServerConfig; |
||||
import com.fr.base.TemplateUtils; |
||||
import com.fr.base.email.EmailCenter; |
||||
import com.fr.cbb.general.GeneralUtils; |
||||
import com.fr.data.NetworkHelper; |
||||
import com.fr.decision.authority.AuthorityContext; |
||||
import com.fr.decision.authority.data.CustomRole; |
||||
import com.fr.decision.authority.data.User; |
||||
import com.fr.decision.config.FSConfig; |
||||
import com.fr.decision.config.LoginVerificationConfig; |
||||
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
||||
import com.fr.decision.mobile.terminal.TerminalHandler; |
||||
import com.fr.decision.privilege.TransmissionTool; |
||||
import com.fr.decision.record.LoginMessage; |
||||
import com.fr.decision.webservice.bean.authentication.LoginClientBean; |
||||
import com.fr.decision.webservice.bean.authentication.LoginResponseInfoBean; |
||||
import com.fr.decision.webservice.bean.authentication.OriginUrlResponseBean; |
||||
import com.fr.decision.webservice.utils.ControllerFactory; |
||||
import com.fr.decision.webservice.utils.DecisionServiceConstants; |
||||
import com.fr.decision.webservice.utils.DecisionStatusService; |
||||
import com.fr.decision.webservice.utils.WebServiceUtils; |
||||
import com.fr.decision.webservice.utils.controller.AuthenticController; |
||||
import com.fr.decision.webservice.v10.login.LoginService; |
||||
import com.fr.decision.webservice.v10.password.strategy.PasswordStrategyService; |
||||
import com.fr.decision.webservice.v10.sms.SMSService; |
||||
import com.fr.decision.webservice.v10.user.UserService; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.plugin.decision.auth.RequestReaderHttpServletRequestWrapper; |
||||
import com.fr.plugin.decision.auth.config.AuthLoginPluginConfig; |
||||
import com.fr.security.TokenProcessorManager; |
||||
import com.fr.stable.StableUtils; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.servlet.FilterChain; |
||||
import javax.servlet.http.Cookie; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
|
||||
import com.fr.stable.query.QueryFactory; |
||||
import com.fr.stable.web.Device; |
||||
import com.fr.store.Converter; |
||||
import com.fr.third.org.apache.commons.lang3.time.DateFormatUtils; |
||||
import com.fr.third.org.apache.http.HttpStatus; |
||||
import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; |
||||
import com.fr.third.org.apache.http.client.methods.HttpPost; |
||||
import com.fr.third.org.apache.http.entity.StringEntity; |
||||
import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; |
||||
import com.fr.third.org.apache.http.impl.client.HttpClients; |
||||
import com.fr.third.org.apache.http.util.EntityUtils; |
||||
import com.fr.web.utils.WebUtils; |
||||
import net.sf.json.JSONObject; |
||||
|
||||
import java.io.PrintWriter; |
||||
import java.util.*; |
||||
|
||||
public class AuthLoginRequestFilter extends AbstractGlobalRequestFilterProvider { |
||||
|
||||
@Override |
||||
public String filterName() { |
||||
return "AuthLoginFilter"; |
||||
} |
||||
|
||||
@Override |
||||
public String[] urlPatterns() { |
||||
return new String[]{ |
||||
"/decision/login" |
||||
}; |
||||
} |
||||
|
||||
/** |
||||
* 实现统一身份认证拦截处理 |
||||
* @param req |
||||
* @param res |
||||
* @param filterChain |
||||
*/ |
||||
@Override |
||||
public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { |
||||
|
||||
try { |
||||
|
||||
// 获取请求中的流如何,将取出来的字符串,再次转换成流,然后把它放入到新request对象中。
|
||||
RequestReaderHttpServletRequestWrapper requestWrapper |
||||
= new RequestReaderHttpServletRequestWrapper((HttpServletRequest) req); |
||||
|
||||
String body = requestWrapper.getBody(); |
||||
|
||||
// 验证请求
|
||||
boolean bolRet = true; |
||||
|
||||
if (StringUtils.isNotEmpty(body)) { |
||||
|
||||
JSONObject bodyJson = JSONObject.fromObject(body); |
||||
|
||||
// 用户名
|
||||
String username = bodyJson.getString("username"); |
||||
|
||||
// 系统管理员 保留帆软验证
|
||||
if ("admin".equals(username)) { |
||||
filterChain.doFilter(requestWrapper, res); |
||||
return; |
||||
} |
||||
|
||||
// 加密后密码
|
||||
String encPassword = bodyJson.getString("password"); |
||||
|
||||
String origin = GeneralUtils.objectToString(bodyJson.get("origin")); |
||||
|
||||
int validity = bodyJson.getInt("validity"); |
||||
|
||||
// 帆软解密密码
|
||||
String password = TransmissionTool.decrypt(encPassword); |
||||
|
||||
// 统一身份认证
|
||||
String responseStr = getUserInfo(username, password, "tzbank"); |
||||
if (responseStr == null) { |
||||
responseStr = getUserInfo(username, password, "czbank"); |
||||
} |
||||
|
||||
if (responseStr != null) { |
||||
|
||||
JSONObject resData = JSONObject.fromObject(responseStr); |
||||
|
||||
if ("S".equals(resData.getJSONObject("SYS_HEAD").getString("RET_STATUS")) |
||||
&& "000000".equals(resData.getJSONObject("SYS_HEAD").getJSONArray("RET").getJSONObject(0).getString("RET_CODE"))) { |
||||
|
||||
UserService userService = UserService.getInstance(); |
||||
User user = userService.getUserByUserName(username); |
||||
|
||||
if (user != null) { |
||||
String frToken = LoginService.getInstance().login(requestWrapper, res, username); |
||||
requestWrapper.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME, frToken); |
||||
|
||||
// 以下部分参考 LoginService.login 方法 START
|
||||
OriginUrlResponseBean url = null; |
||||
if (StringUtils.isNotEmpty(origin)) { |
||||
url = (OriginUrlResponseBean) DecisionStatusService.originUrlStatusService().get(origin); |
||||
DecisionStatusService.originUrlStatusService().delete(origin); |
||||
if (url == null) { |
||||
url = new OriginUrlResponseBean(TemplateUtils.render("${fineServletURL}")); |
||||
} |
||||
} else { |
||||
url = new OriginUrlResponseBean(TemplateUtils.render("${fineServletURL}")); |
||||
} |
||||
|
||||
Device device = NetworkHelper.getDevice(req); |
||||
String ip = WebServiceUtils.getIpInfoFromRequest(req); |
||||
|
||||
TerminalHandler terminal = TerminalHandler.getTerminal(req, device); |
||||
AuthenticController authenticController = ControllerFactory.getInstance().getAuthenticController(user.getId()); |
||||
long tokenTimeout = this.getTokenTimeOutByValidity(validity); |
||||
String token = this.generateToken(user, tokenTimeout); |
||||
authenticController.verifySingleLoginStatus(user.getUserName(), terminal, token); |
||||
if (authenticController.passwordChangeable(user)) { |
||||
PasswordStrategyService.getInstance().checkPasswordNeedUpdate(user, token); |
||||
} |
||||
|
||||
LoginClientBean clientBean = new LoginClientBean(req, device, terminal); |
||||
clientBean.setUsername(user.getUserName()); |
||||
clientBean.setToken(token); |
||||
clientBean.setValidity(validity); |
||||
clientBean.setUserId(user.getId()); |
||||
authenticController.logoutSingleLoginInvalidUser(user.getUserName(), terminal); |
||||
this.addLoginStatus(token, clientBean, tokenTimeout); |
||||
LoginService.getInstance().checkServerInitStatus(); |
||||
this.createLoginMessage(ip, user.getUserName(), user.getId()); |
||||
if (ServerConfig.getInstance().isTokenFromCookie()) { |
||||
this.writeToken2Cookie(res, token, validity); |
||||
} |
||||
|
||||
LoginResponseInfoBean responseInfoBean = new LoginResponseInfoBean(token, url, user.getUserName(), validity); |
||||
// 以上部分参考 LoginService.login 方法 END
|
||||
|
||||
com.fr.json.JSONObject data = buildResponseValue(responseInfoBean); |
||||
WebUtils.printAsJSON(res, data); |
||||
|
||||
return; |
||||
|
||||
} else { |
||||
bolRet = false; |
||||
} |
||||
} else { |
||||
bolRet = false; |
||||
} |
||||
|
||||
} else { |
||||
bolRet = false; |
||||
} |
||||
} |
||||
|
||||
if (!bolRet) { |
||||
// 统一身份认证请求失败 用户名或密码错误
|
||||
JSONObject object = new JSONObject(); |
||||
PrintWriter pw; |
||||
object.put("errorCode", "21300007"); |
||||
object.put("errorMsg", "User not exist, or wrong password!"); |
||||
pw = WebUtils.createPrintWriter(res); |
||||
res.setContentType("application/json;charset=utf-8"); |
||||
String result = object.toString(); |
||||
pw.println(result); |
||||
pw.flush(); |
||||
pw.close(); |
||||
|
||||
return; |
||||
} |
||||
|
||||
filterChain.doFilter(requestWrapper, res); |
||||
|
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
} |
||||
|
||||
private String getUserInfo(String username, String password, String bankType) { |
||||
|
||||
// 配置参数
|
||||
AuthLoginPluginConfig authLoginPluginConfig = AuthLoginPluginConfig.getInstance(); |
||||
|
||||
// 服务代码
|
||||
String serviceCode = authLoginPluginConfig.getServiceCode(); |
||||
// 服务场景
|
||||
String serviceScene = authLoginPluginConfig.getServiceScene(); |
||||
// 消费系统ID
|
||||
String consumerId = authLoginPluginConfig.getConsumerId(); |
||||
// 消费顺序号码
|
||||
String consumerSeqNo = authLoginPluginConfig.getConsumerSeqNo(); |
||||
// 系统编码
|
||||
String systemNo = authLoginPluginConfig.getSystemNo(); |
||||
// 请求URL
|
||||
String postUrl = authLoginPluginConfig.getUrl(); |
||||
|
||||
Req request = new Req(); |
||||
SYS_HEAD sysHeader = new SYS_HEAD(); |
||||
APP_HEAD appHeader = new APP_HEAD(); |
||||
Certificate_BODY BODY = new Certificate_BODY(); |
||||
|
||||
request.setSYS_HEAD(sysHeader); |
||||
request.setAPP_HEAD(appHeader); |
||||
request.setBODY(BODY); |
||||
|
||||
String yyyyMMddHHmmssSSS = DateFormatUtils.format(System.currentTimeMillis(), "yyyyMMddHHmmssSSS"); |
||||
|
||||
sysHeader.setCONSUMER_ID(consumerId); |
||||
sysHeader.setCONSUMER_SEQ_NO(consumerSeqNo); |
||||
sysHeader.setSERVICE_CODE(serviceCode); |
||||
sysHeader.setSERVICE_SCENE(serviceScene); |
||||
sysHeader.setTRAN_DATE(yyyyMMddHHmmssSSS.substring(0, 8)); |
||||
sysHeader.setTRAN_TIMESTAMP(yyyyMMddHHmmssSSS.substring(8, 17)); |
||||
|
||||
BODY.setSYSTEM_NO(systemNo); |
||||
BODY.setBANK_SYSTEM_TYPE(bankType); |
||||
|
||||
BODY.setUSER_ID(username); |
||||
DesSecurity desSecurity = new DesSecurity(); |
||||
BODY.setUSER_PASSWORD(desSecurity.pinEncrypt(password)); |
||||
|
||||
sysHeader.setUSER_ID(username); |
||||
DesSecurity ds = new DesSecurity(); |
||||
sysHeader.setUSER_PASSWORD(ds.pinEncrypt(password)); |
||||
|
||||
String reqStr = JSONObject.fromObject(request).toString(); |
||||
FineLoggerFactory.getLogger().info("reqStr=" + reqStr); |
||||
|
||||
StringEntity sn = new StringEntity(reqStr, "utf-8"); |
||||
|
||||
HttpPost post = new HttpPost(postUrl); |
||||
post.addHeader("Content-Type", "application/json"); |
||||
|
||||
post.setEntity(sn); |
||||
|
||||
CloseableHttpClient httpClient = HttpClients.createDefault(); |
||||
|
||||
CloseableHttpResponse response = null; |
||||
String responseStr = null; |
||||
|
||||
try { |
||||
|
||||
response = httpClient.execute(post); |
||||
|
||||
int statusCode = response.getStatusLine().getStatusCode(); |
||||
responseStr = EntityUtils.toString(response.getEntity(), "utf-8"); |
||||
FineLoggerFactory.getLogger().info("statusCode=" + statusCode); |
||||
FineLoggerFactory.getLogger().info("responseStr=" + responseStr); |
||||
|
||||
JSONObject resData = JSONObject.fromObject(responseStr); |
||||
|
||||
if (statusCode != HttpStatus.SC_OK) { |
||||
|
||||
responseStr = null; |
||||
} else { |
||||
|
||||
// 用户不存在
|
||||
if ("4444".equals(resData.getJSONObject("SYS_HEAD").getJSONArray("RET").getJSONObject(0).getString("RET_CODE"))) { |
||||
|
||||
responseStr = null; |
||||
} |
||||
} |
||||
|
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
|
||||
return responseStr; |
||||
} |
||||
|
||||
private long getTokenTimeOutByValidity(int validity) { |
||||
return validity == -2 ? 1209600000L : FSConfig.getInstance().getLoginConfig().getLoginTimeout(); |
||||
} |
||||
|
||||
private String generateToken(User user, long timeOut) { |
||||
return this.generateToken(user.getUserName(), user.getDisplayName(), user.getTenantId(), timeOut); |
||||
} |
||||
|
||||
private String generateToken(String username, String displayName, String tenantId, long timeOut) { |
||||
Map<String, Object> claims = new HashMap(); |
||||
claims.put("description", displayName); |
||||
claims.put("tenantId", tenantId); |
||||
return TokenProcessorManager.getCurrentProcessor().generateToken(username, claims, timeOut); |
||||
} |
||||
|
||||
private void addLoginStatus(String token, LoginClientBean clientBean, long tokenTimeout) throws Exception { |
||||
DecisionStatusService.loginStatusService().put(token, clientBean, new Converter<LoginClientBean>() { |
||||
public String[] createAlias(LoginClientBean loginClientBean) { |
||||
return new String[]{loginClientBean.getUsername()}; |
||||
} |
||||
}, tokenTimeout); |
||||
} |
||||
|
||||
private LoginMessage createLoginMessage(String ip, String username, String userId) throws Exception { |
||||
return LoginMessage.build(ip, username, this.getUserRole(userId)); |
||||
} |
||||
|
||||
private boolean needLoginVerification(Device device) { |
||||
if (device.isMobile()) { |
||||
return LoginVerificationConfig.getInstance().isSmsVerification() && SMSService.getInstance().isSMSAvailable(); |
||||
} else { |
||||
return LoginVerificationConfig.getInstance().isSmsVerification() && SMSService.getInstance().isSMSAvailable() || LoginVerificationConfig.getInstance().isEmailVerification() && EmailCenter.isDefaultEmailConfigValid(); |
||||
} |
||||
} |
||||
|
||||
private String getUserRole(String userId) throws Exception { |
||||
List<String> customRoleName = new ArrayList(); |
||||
List<CustomRole> customRoles = AuthorityContext.getInstance().getCustomRoleController().findByUser(userId, QueryFactory.create()); |
||||
if (customRoles != null && !customRoles.isEmpty()) { |
||||
Iterator var4 = customRoles.iterator(); |
||||
|
||||
while(var4.hasNext()) { |
||||
CustomRole customRole = (CustomRole)var4.next(); |
||||
customRoleName.add(customRole.getName()); |
||||
} |
||||
} |
||||
|
||||
return customRoleName.isEmpty() ? "" : StableUtils.join(customRoleName, ","); |
||||
} |
||||
|
||||
private void writeToken2Cookie(HttpServletResponse response, String token, int validity) { |
||||
try { |
||||
if (StringUtils.isNotEmpty(token)) { |
||||
Cookie cookie = new Cookie("fine_auth_token", token); |
||||
long cookieLife = validity == -2 ? 1209600000L : (long)validity; |
||||
cookie.setMaxAge((int)cookieLife); |
||||
cookie.setPath(ServerConfig.getInstance().getCookiePath()); |
||||
response.addCookie(cookie); |
||||
Cookie rememberLogin = new Cookie("fine_remember_login", String.valueOf(validity == -2 ? -2 : -1)); |
||||
rememberLogin.setMaxAge((int)cookieLife); |
||||
rememberLogin.setPath(ServerConfig.getInstance().getCookiePath()); |
||||
response.addCookie(rememberLogin); |
||||
} else { |
||||
FineLoggerFactory.getLogger().error("empty token cannot save."); |
||||
} |
||||
} catch (Exception var8) { |
||||
FineLoggerFactory.getLogger().error(var8.getMessage(), var8); |
||||
} |
||||
} |
||||
|
||||
private static com.fr.json.JSONObject buildResponseValue(LoginResponseInfoBean responseInfoBean){ |
||||
|
||||
com.fr.json.JSONObject data = new com.fr.json.JSONObject(); |
||||
data.put("username",responseInfoBean.getUsername()); |
||||
data.put("validity",responseInfoBean.getValidity()); |
||||
data.put("callback",responseInfoBean.getCallback()); |
||||
data.put("accessToken",responseInfoBean.getAccessToken()); |
||||
|
||||
OriginUrlResponseBean originUrlResponse = responseInfoBean.getOriginUrlResponse(); |
||||
JSONObject originUrlJson = new JSONObject(); |
||||
originUrlJson.put("originUrl",originUrlResponse.getOriginUrl()); |
||||
originUrlJson.put("method",originUrlResponse.getMethod()); |
||||
originUrlJson.put("parameters",originUrlResponse.getParameters()); |
||||
|
||||
data.put("originUrlResponse",originUrlJson); |
||||
data.put("url",responseInfoBean.getUrl()); |
||||
|
||||
return new com.fr.json.JSONObject().put("data",data); |
||||
} |
||||
|
||||
public static class Req<T> { |
||||
private SYS_HEAD SYS_HEAD; |
||||
private APP_HEAD APP_HEAD; |
||||
private T BODY; |
||||
|
||||
public SYS_HEAD getSYS_HEAD() { |
||||
return SYS_HEAD; |
||||
} |
||||
|
||||
public void setSYS_HEAD(SYS_HEAD SYS_HEAD) { |
||||
this.SYS_HEAD = SYS_HEAD; |
||||
} |
||||
|
||||
public APP_HEAD getAPP_HEAD() { |
||||
return APP_HEAD; |
||||
} |
||||
|
||||
public void setAPP_HEAD(APP_HEAD APP_HEAD) { |
||||
this.APP_HEAD = APP_HEAD; |
||||
} |
||||
|
||||
public T getBODY() { |
||||
return BODY; |
||||
} |
||||
|
||||
public void setBODY(T BODY) { |
||||
this.BODY = BODY; |
||||
} |
||||
} |
||||
|
||||
public static class SYS_HEAD { |
||||
private String SERVICE_CODE; |
||||
private String SERVICE_SCENE; |
||||
private String CONSUMER_ID; |
||||
private String TRAN_DATE; |
||||
private String TRAN_TIMESTAMP; |
||||
private String CONSUMER_SEQ_NO; |
||||
private String USER_ID; |
||||
private String USER_PASSWORD; |
||||
|
||||
public String getSERVICE_CODE() { |
||||
return SERVICE_CODE; |
||||
} |
||||
|
||||
public void setSERVICE_CODE(String SERVICE_CODE) { |
||||
this.SERVICE_CODE = SERVICE_CODE; |
||||
} |
||||
|
||||
public String getSERVICE_SCENE() { |
||||
return SERVICE_SCENE; |
||||
} |
||||
|
||||
public void setSERVICE_SCENE(String SERVICE_SCENE) { |
||||
this.SERVICE_SCENE = SERVICE_SCENE; |
||||
} |
||||
|
||||
public String getCONSUMER_ID() { |
||||
return CONSUMER_ID; |
||||
} |
||||
|
||||
public void setCONSUMER_ID(String CONSUMER_ID) { |
||||
this.CONSUMER_ID = CONSUMER_ID; |
||||
} |
||||
|
||||
public String getTRAN_DATE() { |
||||
return TRAN_DATE; |
||||
} |
||||
|
||||
public void setTRAN_DATE(String TRAN_DATE) { |
||||
this.TRAN_DATE = TRAN_DATE; |
||||
} |
||||
|
||||
public String getTRAN_TIMESTAMP() { |
||||
return TRAN_TIMESTAMP; |
||||
} |
||||
|
||||
public void setTRAN_TIMESTAMP(String TRAN_TIMESTAMP) { |
||||
this.TRAN_TIMESTAMP = TRAN_TIMESTAMP; |
||||
} |
||||
|
||||
public String getCONSUMER_SEQ_NO() { |
||||
return CONSUMER_SEQ_NO; |
||||
} |
||||
|
||||
public void setCONSUMER_SEQ_NO(String CONSUMER_SEQ_NO) { |
||||
this.CONSUMER_SEQ_NO = CONSUMER_SEQ_NO; |
||||
} |
||||
|
||||
public String getUSER_ID() { |
||||
return USER_ID; |
||||
} |
||||
|
||||
public void setUSER_ID(String USER_ID) { |
||||
this.USER_ID = USER_ID; |
||||
} |
||||
|
||||
public String getUSER_PASSWORD() { |
||||
return USER_PASSWORD; |
||||
} |
||||
|
||||
public void setUSER_PASSWORD(String USER_PASSWORD) { |
||||
this.USER_PASSWORD = USER_PASSWORD; |
||||
} |
||||
} |
||||
|
||||
public static class APP_HEAD { |
||||
} |
||||
|
||||
public static class Certificate_BODY { |
||||
private String BANK_SYSTEM_TYPE; |
||||
private String SYSTEM_NO; |
||||
private String USER_ID; |
||||
private String USER_PASSWORD; |
||||
|
||||
public String getBANK_SYSTEM_TYPE() { |
||||
return BANK_SYSTEM_TYPE; |
||||
} |
||||
|
||||
public void setBANK_SYSTEM_TYPE(String BANK_SYSTEM_TYPE) { |
||||
this.BANK_SYSTEM_TYPE = BANK_SYSTEM_TYPE; |
||||
} |
||||
|
||||
public String getSYSTEM_NO() { |
||||
return SYSTEM_NO; |
||||
} |
||||
|
||||
public void setSYSTEM_NO(String SYSTEM_NO) { |
||||
this.SYSTEM_NO = SYSTEM_NO; |
||||
} |
||||
|
||||
public String getUSER_ID() { |
||||
return USER_ID; |
||||
} |
||||
|
||||
public void setUSER_ID(String USER_ID) { |
||||
this.USER_ID = USER_ID; |
||||
} |
||||
|
||||
public String getUSER_PASSWORD() { |
||||
return USER_PASSWORD; |
||||
} |
||||
|
||||
public void setUSER_PASSWORD(String USER_PASSWORD) { |
||||
this.USER_PASSWORD = USER_PASSWORD; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,286 @@
|
||||
package com.fr.plugin.decision.auth.filter; |
||||
|
||||
import com.fr.decision.authority.data.User; |
||||
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
||||
import com.fr.decision.webservice.utils.DecisionServiceConstants; |
||||
import com.fr.decision.webservice.v10.login.LoginService; |
||||
import com.fr.decision.webservice.v10.user.UserService; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.plugin.decision.auth.config.SsoLoginPluginConfig; |
||||
import com.fr.third.org.apache.http.HttpStatus; |
||||
import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; |
||||
import com.fr.third.org.apache.http.client.methods.HttpPost; |
||||
import com.fr.third.org.apache.http.entity.StringEntity; |
||||
import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; |
||||
import com.fr.third.org.apache.http.impl.client.HttpClients; |
||||
import com.fr.third.org.apache.http.util.EntityUtils; |
||||
import com.fr.web.utils.WebUtils; |
||||
import net.sf.json.JSONObject; |
||||
|
||||
import javax.servlet.FilterChain; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
|
||||
public class SsoLoginRequestFilter extends AbstractGlobalRequestFilterProvider { |
||||
|
||||
@Override |
||||
public String filterName() { |
||||
return "SsoLoginFilter"; |
||||
} |
||||
|
||||
@Override |
||||
public String[] urlPatterns() { |
||||
return new String[]{ |
||||
"/decision/ssoLogin" |
||||
}; |
||||
} |
||||
|
||||
/** |
||||
* 实现单点登录拦截处理 |
||||
* @param req |
||||
* @param res |
||||
* @param filterChain |
||||
*/ |
||||
@Override |
||||
public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { |
||||
|
||||
try { |
||||
|
||||
String url = WebUtils.getOriginalURL(req); |
||||
|
||||
if (url.contains("decision/ssoLogin")) { |
||||
|
||||
// token参数值
|
||||
String token = req.getParameter("token"); |
||||
|
||||
// 配置参数
|
||||
SsoLoginPluginConfig ssoLoginPluginConfig = SsoLoginPluginConfig.getInstance(); |
||||
|
||||
// 服务代码
|
||||
String serviceCode = ssoLoginPluginConfig.getServiceCode(); |
||||
// 服务场景
|
||||
String serviceScene = ssoLoginPluginConfig.getServiceScene(); |
||||
// 消费系统ID
|
||||
String consumerId = ssoLoginPluginConfig.getConsumerId(); |
||||
// 目标系统ID
|
||||
String targetSysId = ssoLoginPluginConfig.getTargetSysId(); |
||||
// 系统编码
|
||||
String systemNo = ssoLoginPluginConfig.getSystemNo(); |
||||
// 请求URL
|
||||
String postUrl = ssoLoginPluginConfig.getUrl(); |
||||
|
||||
Req<SINGLE_LOGIN_BODY> request = new Req(); |
||||
SYS_HEAD sysHeader = new SYS_HEAD(); |
||||
APP_HEAD appHeader = new APP_HEAD(); |
||||
SINGLE_LOGIN_BODY BODY = new SINGLE_LOGIN_BODY(); |
||||
|
||||
request.setSYS_HEAD(sysHeader); |
||||
request.setAPP_HEAD(appHeader); |
||||
request.setBODY(BODY); |
||||
|
||||
sysHeader.setCONSUMER_ID(consumerId); |
||||
sysHeader.setSERVICE_CODE(serviceCode); |
||||
sysHeader.setSERVICE_SCENE(serviceScene); |
||||
sysHeader.setTARGET_SYS_ID(targetSysId); |
||||
|
||||
BODY.setSYSTEM_NO(systemNo); |
||||
BODY.setTOKEN_NO(token); |
||||
|
||||
String reqStr = JSONObject.fromObject(request).toString(); |
||||
FineLoggerFactory.getLogger().info("reqStr=" + reqStr); |
||||
|
||||
StringEntity sn = new StringEntity(reqStr, "utf-8"); |
||||
|
||||
HttpPost post = new HttpPost(postUrl); |
||||
post.addHeader("Content-Type","application/json"); |
||||
|
||||
post.setEntity(sn); |
||||
|
||||
CloseableHttpClient httpClient = HttpClients.createDefault(); |
||||
|
||||
CloseableHttpResponse response = httpClient.execute(post); |
||||
|
||||
int statusCode = response.getStatusLine().getStatusCode(); |
||||
String responseStr = EntityUtils.toString(response.getEntity(), "utf-8"); |
||||
FineLoggerFactory.getLogger().info("statusCode=" + statusCode); |
||||
FineLoggerFactory.getLogger().info("responseStr=" + responseStr); |
||||
|
||||
if (statusCode != HttpStatus.SC_OK) { |
||||
FineLoggerFactory.getLogger().error("TOKEN验证请求失败"); |
||||
WebUtils.printAsString(res, "TOKEN验证请求失败"); |
||||
return; |
||||
} |
||||
|
||||
JSONObject resData = JSONObject.fromObject(responseStr); |
||||
|
||||
if ("S".equals(resData.getJSONObject("SYS_HEAD").getString("RET_STATUS")) |
||||
&& "000000".equals(resData.getJSONObject("SYS_HEAD").getJSONArray("RET").getJSONObject(0).getString("RET_CODE"))) { |
||||
|
||||
// 用户名
|
||||
String userName = ""; |
||||
|
||||
if (resData.getJSONObject("BODY").getString("LOGON_ID") != null) { |
||||
userName = resData.getJSONObject("BODY").getString("LOGON_ID").trim(); |
||||
} |
||||
|
||||
FineLoggerFactory.getLogger().info("userName:" + userName); |
||||
|
||||
UserService userService = UserService.getInstance(); |
||||
User user = userService.getUserByUserName(userName); |
||||
|
||||
if (user != null) { |
||||
String frToken = LoginService.getInstance().login(req, res, userName); |
||||
req.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME, frToken); |
||||
|
||||
String newUrl = url.substring(0, url.indexOf("/ssoLogin")); |
||||
res.sendRedirect(newUrl); |
||||
|
||||
return; |
||||
|
||||
} else { |
||||
FineLoggerFactory.getLogger().error("获取的用户 :{} 在帆软系统中不存在", userName); |
||||
WebUtils.printAsString(res, "获取的用户 : " + userName + "在帆软系统中不存在"); |
||||
return; |
||||
} |
||||
|
||||
} else { |
||||
FineLoggerFactory.getLogger().error("TOKEN验证请求失败"); |
||||
WebUtils.printAsString(res, "TOKEN验证请求失败"); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
filterChain.doFilter(req, res); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
try { |
||||
WebUtils.printAsString(res, "TOKEN验证请求失败"); |
||||
} catch (Exception ex) { |
||||
} |
||||
} |
||||
} |
||||
|
||||
public static class Req<T> { |
||||
private SYS_HEAD SYS_HEAD; |
||||
private APP_HEAD APP_HEAD; |
||||
private T BODY; |
||||
|
||||
public SYS_HEAD getSYS_HEAD() { |
||||
return SYS_HEAD; |
||||
} |
||||
|
||||
public void setSYS_HEAD(SYS_HEAD SYS_HEAD) { |
||||
this.SYS_HEAD = SYS_HEAD; |
||||
} |
||||
|
||||
public APP_HEAD getAPP_HEAD() { |
||||
return APP_HEAD; |
||||
} |
||||
|
||||
public void setAPP_HEAD(APP_HEAD APP_HEAD) { |
||||
this.APP_HEAD = APP_HEAD; |
||||
} |
||||
|
||||
public T getBODY() { |
||||
return BODY; |
||||
} |
||||
|
||||
public void setBODY(T BODY) { |
||||
this.BODY = BODY; |
||||
} |
||||
} |
||||
|
||||
public static class SYS_HEAD { |
||||
private String SERVICE_CODE; |
||||
private String SERVICE_SCENE; |
||||
private String CONSUMER_ID; |
||||
private String TARGET_SYS_ID; |
||||
|
||||
public String getSERVICE_CODE() { |
||||
return SERVICE_CODE; |
||||
} |
||||
|
||||
public void setSERVICE_CODE(String SERVICE_CODE) { |
||||
this.SERVICE_CODE = SERVICE_CODE; |
||||
} |
||||
|
||||
public String getSERVICE_SCENE() { |
||||
return SERVICE_SCENE; |
||||
} |
||||
|
||||
public void setSERVICE_SCENE(String SERVICE_SCENE) { |
||||
this.SERVICE_SCENE = SERVICE_SCENE; |
||||
} |
||||
|
||||
public String getCONSUMER_ID() { |
||||
return CONSUMER_ID; |
||||
} |
||||
|
||||
public void setCONSUMER_ID(String CONSUMER_ID) { |
||||
this.CONSUMER_ID = CONSUMER_ID; |
||||
} |
||||
|
||||
public String getTARGET_SYS_ID() { |
||||
return TARGET_SYS_ID; |
||||
} |
||||
|
||||
public void setTARGET_SYS_ID(String TARGET_SYS_ID) { |
||||
this.TARGET_SYS_ID = TARGET_SYS_ID; |
||||
} |
||||
} |
||||
|
||||
public static class APP_HEAD { |
||||
} |
||||
|
||||
public static class SINGLE_LOGIN_BODY { |
||||
private String TOKEN_NO; |
||||
private String SYSTEM_NO; |
||||
|
||||
public String getTOKEN_NO() { |
||||
return TOKEN_NO; |
||||
} |
||||
|
||||
public void setTOKEN_NO(String TOKEN_NO) { |
||||
this.TOKEN_NO = TOKEN_NO; |
||||
} |
||||
|
||||
public String getSYSTEM_NO() { |
||||
return SYSTEM_NO; |
||||
} |
||||
|
||||
public void setSYSTEM_NO(String SYSTEM_NO) { |
||||
this.SYSTEM_NO = SYSTEM_NO; |
||||
} |
||||
} |
||||
|
||||
public static class SINGLE_LOGIN_RES_BODY { |
||||
private String LOGON_ID; |
||||
private String BANK_SYSTEM_TYPE; |
||||
private String PASSWORD; |
||||
|
||||
public String getLOGON_ID() { |
||||
return LOGON_ID; |
||||
} |
||||
|
||||
public void setLOGON_ID(String LOGON_ID) { |
||||
this.LOGON_ID = LOGON_ID; |
||||
} |
||||
|
||||
public String getBANK_SYSTEM_TYPE() { |
||||
return BANK_SYSTEM_TYPE; |
||||
} |
||||
|
||||
public void setBANK_SYSTEM_TYPE(String BANK_SYSTEM_TYPE) { |
||||
this.BANK_SYSTEM_TYPE = BANK_SYSTEM_TYPE; |
||||
} |
||||
|
||||
public String getPASSWORD() { |
||||
return PASSWORD; |
||||
} |
||||
|
||||
public void setPASSWORD(String PASSWORD) { |
||||
this.PASSWORD = PASSWORD; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,28 @@
|
||||
package com.fr.plugin.decision.auth.utils; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import java.io.BufferedReader; |
||||
import java.io.InputStreamReader; |
||||
|
||||
public class FRUtils { |
||||
|
||||
/** |
||||
* 从req获取json字符串数据 |
||||
*/ |
||||
public static String getBodyString(HttpServletRequest request) throws Exception { |
||||
|
||||
BufferedReader bf = new BufferedReader(new InputStreamReader( |
||||
request.getInputStream(), "UTF-8")); |
||||
|
||||
StringBuffer sb = new StringBuffer(); |
||||
String tmp; |
||||
|
||||
while ((tmp = bf.readLine()) != null) { |
||||
sb.append(tmp); |
||||
} |
||||
bf.close(); |
||||
|
||||
return sb.toString(); |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue