Commit b4e8040c by WeiCong

在交易初始化前增加预处理机制

parent a5f78102
package org.sss.module.pojo;
import com.brilliance.eibs.etrade.module.Sysmod;
import log.Log;
import log.LogFactory;
import org.apache.commons.beanutils.ConstructorUtils;
import org.apache.commons.beanutils.MethodUtils;
import org.sss.common.model.Argument;
import org.sss.common.model.IModule;
import org.sss.common.model.IModuleRoot;
import org.sss.presentation.noui.context.NoUiContext;
import org.sss.presentation.noui.util.PropertyUtil;
import org.sss.presentation.noui.util.StringUtil;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
/**
* 针对光大e结算(或许还能针对所有执行具体交易前的预处理场景)
*/
public class PreHandle {
private static final Log log = LogFactory.getLog(PreHandle.class);
private static HashMap<String, String[]> config = new HashMap<String, String[]>();
static {
try {
Map<String, String> tmp = new HashMap<String, String>((Map) PropertyUtil.load("prehandle.properties"));
for (Map.Entry<String, String> entry : tmp.entrySet()) {
String key = entry.getKey();
String val = entry.getValue();
if (config.containsKey(key)) {
log.warn("忽略重复的安全信息:" + key);
continue;
}
if (StringUtil.isEmpty(val)) {
log.warn("忽略值为空的安全信息:" + key);
continue;
}
config.put(key, val.split(";"));
}
} catch (Exception e) {
//降级处理
config = new HashMap<String, String[]>();
log.warn("加载安全配置文件失败:" + e.getMessage());
}
}
public static boolean needPreHandle(String mappingUrl) {
return config.containsKey(mappingUrl);
}
public static void preHandle(String trnName, Map<String, ?> paramsMap, NoUiContext context) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
String[] handles = config.get(trnName);
for (String handle : handles) {
if (StringUtil.isEmpty(handle)) {
continue;
}
String[] items = handle.split(",");
if (items.length == 0 || StringUtil.isEmpty(items[0])) {
log.warn(trnName + "关联的预处理不符合配置规则:至少需要配置预处理方法");
continue;
}
String method = items[0];
String[] args = new String[items.length - 1];
if (args.length > 0) {
System.arraycopy(items, 1, args, 0, args.length);
}
MethodUtils.invokeStaticMethod(PreHandle.class, method, new Object[]{context, paramsMap, args});
}
}
public static void sureBtn(NoUiContext ctx, Map<String, ?> paramsMap, Object... otherParams) throws Exception {
if (otherParams.length != 2) {
log.warn("执行sureBtn预处理方法,需要两个参数:'Module名称'和'待跳转的交易名称'");
return;
}
if(paramsMap.get("__inr")==null){
log.warn("执行sureBtn预处理方法,params中需要__inr关键字对应的模型inr");
return;
}
String grpNam = (String) otherParams[0];
String toTrs = (String) otherParams[1];
String packageName = ((AbstractPOJOImpl) ctx.getSupport()).getPackageName(toTrs);
String className = packageName + "." + toTrs.substring(0, 1).toUpperCase() + toTrs.substring(1);
IModuleRoot root = (IModuleRoot) ConstructorUtils.invokeConstructor(Class.forName(className), new Object[]{toTrs, new Sysmod()}
, new Class[]{String.class, IModule.class});
IModule grp = (IModule) ctx.getSession().getBaseObject(root, grpNam + "\\rec");
ctx.getSupport().get(grp, new Argument[]{new Argument("inr", paramsMap.get("__inr"))});
ctx.getError();
ctx.getSession().storeData("com.brilliance." + toTrs + ".ref", grp);
}
}
...@@ -3,12 +3,15 @@ package org.sss.presentation.noui.context; ...@@ -3,12 +3,15 @@ package org.sss.presentation.noui.context;
import log.Log; import log.Log;
import log.LogFactory; import log.LogFactory;
import org.sss.common.impl.AbstractContext; import org.sss.common.impl.AbstractContext;
import org.sss.presentation.noui.api.request.NoUiRequest;
import org.sss.presentation.noui.jwt.LoginInfo; import org.sss.presentation.noui.jwt.LoginInfo;
import org.sss.presentation.noui.util.NoUiUtils; import org.sss.presentation.noui.util.NoUiUtils;
public class NoUiContext extends AbstractContext { public class NoUiContext extends AbstractContext {
private static final Log log = LogFactory.getLog(NoUiContext.class); private static final Log log = LogFactory.getLog(NoUiContext.class);
private LoginInfo loginInfo;
NoUiRequest noUiRequest;
@Override @Override
public void logout() { public void logout() {
...@@ -28,8 +31,6 @@ public class NoUiContext extends AbstractContext { ...@@ -28,8 +31,6 @@ public class NoUiContext extends AbstractContext {
return null; return null;
} }
private LoginInfo loginInfo;
public LoginInfo getLoginInfo() public LoginInfo getLoginInfo()
{ {
return this.loginInfo; return this.loginInfo;
...@@ -38,4 +39,12 @@ public class NoUiContext extends AbstractContext { ...@@ -38,4 +39,12 @@ public class NoUiContext extends AbstractContext {
{ {
this.loginInfo = loginInfo; this.loginInfo = loginInfo;
} }
public NoUiRequest getNoUiRequest() {
return noUiRequest;
}
public void setNoUiRequest(NoUiRequest noUiRequest) {
this.noUiRequest = noUiRequest;
}
} }
package org.sss.presentation.noui.context; package org.sss.presentation.noui.context;
import cn.com.brilliance.eibs.auth.EmptyLoginContext; import cn.com.brilliance.eibs.auth.EmptyLoginContext;
import log.Log; import log.Log;
import log.LogFactory; import log.LogFactory;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.reflect.ConstructorUtils; import org.apache.commons.lang.reflect.ConstructorUtils;
import org.sss.common.model.ILoginContext; import org.sss.common.model.ILoginContext;
import org.sss.common.model.IModuleSession; import org.sss.common.model.IModuleSession;
import org.sss.presentation.noui.api.exception.NoUiException; import org.sss.presentation.noui.api.exception.NoUiException;
import org.sss.presentation.noui.api.request.NoUiRequest; import org.sss.presentation.noui.api.request.NoUiRequest;
import org.sss.presentation.noui.util.NoUiUtils; import org.sss.presentation.noui.util.NoUiUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
public class NoUiContextManager { public class NoUiContextManager {
private static final Log log = LogFactory.getLog(NoUiContextManager.class); private static final Log log = LogFactory.getLog(NoUiContextManager.class);
public static String dbType = "hibernate"; public static String dbType = "hibernate";
public static String loginContextName = "cn.com.brilliance.eibs.auth.DatabaseLoginContext"; public static String loginContextName = "cn.com.brilliance.eibs.auth.DatabaseLoginContext";
public static String openSourcePrefix = "openservice"; public static String openSourcePrefix = "openservice";
public static String everybody = "#Everybody#"; public static String everybody = "#Everybody#";
public static List<String> openTransactions = new ArrayList<String>(); public static List<String> openTransactions = new ArrayList<String>();
public static NoUiContext createNoUiContext(NoUiRequest noUiRequest) { public static NoUiContext createNoUiContext(NoUiRequest noUiRequest) {
NoUiContext noUiContext = new NoUiContext(); NoUiContext noUiContext = new NoUiContext();
ILoginContext loginContext = null; ILoginContext loginContext = null;
if(noUiRequest.isOpenSource()) if(noUiRequest.isOpenSource())
{ {
loginContext = new EmptyLoginContext(everybody); loginContext = new EmptyLoginContext(everybody);
} }
else if (StringUtils.isEmpty(noUiRequest.getToken())) { else if (StringUtils.isEmpty(noUiRequest.getToken())) {
try { try {
loginContext = (ILoginContext) Class.forName(loginContextName).newInstance(); loginContext = (ILoginContext) Class.forName(loginContextName).newInstance();
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
throw new NoUiException("loingConextName class is not found", loginContextName); throw new NoUiException("loingConextName class is not found", loginContextName);
} }
} }
else else
loginContext = new EmptyLoginContext(noUiRequest.getUserId()); loginContext = new EmptyLoginContext(noUiRequest.getUserId());
loginContext.setContext(noUiContext); loginContext.setContext(noUiContext);
noUiContext.setAuth(loginContext); noUiContext.setAuth(loginContext);
noUiContext.setSessionId(UUID.randomUUID().toString()); noUiContext.setSessionId(UUID.randomUUID().toString());
IModuleSession session = null; IModuleSession session = null;
try { try {
Class<?> clazz = Class.forName("org.sss.module." + dbType + ".ModuleSessionImpl"); Class<?> clazz = Class.forName("org.sss.module." + dbType + ".ModuleSessionImpl");
session = (IModuleSession) ConstructorUtils.invokeConstructor(clazz, new Object[] { noUiContext, NoUiUtils.connectKeeped}); session = (IModuleSession) ConstructorUtils.invokeConstructor(clazz, new Object[] { noUiContext, NoUiUtils.connectKeeped});
} catch (Exception e) { } catch (Exception e) {
log.error("Constructs NoUiContext error",e); log.error("Constructs NoUiContext error",e);
throw new NoUiException("Constructs NoUiContext error",e); throw new NoUiException("Constructs NoUiContext error",e);
} }
noUiContext.setGui(new NoUiPresentation(noUiContext, noUiRequest)); noUiContext.setGui(new NoUiPresentation(noUiContext, noUiRequest));
noUiContext.setSession(session); noUiContext.setSession(session);
noUiContext.setNoUiRequest(noUiRequest);
log.debug("Build context finished"); log.debug("Build context finished");
return noUiContext; return noUiContext;
} }
} }
...@@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.sss.common.impl.RuleUtils; import org.sss.common.impl.RuleUtils;
import org.sss.common.model.*; import org.sss.common.model.*;
import org.sss.module.pojo.PreHandle;
import org.sss.presentation.noui.api.exception.ExitTransactionException; import org.sss.presentation.noui.api.exception.ExitTransactionException;
import org.sss.presentation.noui.api.exception.NoUiException; import org.sss.presentation.noui.api.exception.NoUiException;
import org.sss.presentation.noui.api.model.Alias; import org.sss.presentation.noui.api.model.Alias;
...@@ -69,6 +70,9 @@ public abstract class AbstractCommonController { ...@@ -69,6 +70,9 @@ public abstract class AbstractCommonController {
context = NoUiContextManager.createNoUiContext(noUiRequest); context = NoUiContextManager.createNoUiContext(noUiRequest);
// 交易参数赋值 // 交易参数赋值
if(PreHandle.needPreHandle(trnName)){
PreHandle.preHandle(trnName,paramsMap,context);
}
for (String key : paramsMap.keySet()) { for (String key : paramsMap.keySet()) {
context.getSession().storeData(key, paramsMap.get(key)); context.getSession().storeData(key, paramsMap.get(key));
} }
......
...@@ -32,12 +32,11 @@ public class TokenInterceptor implements HandlerInterceptor { ...@@ -32,12 +32,11 @@ public class TokenInterceptor implements HandlerInterceptor {
NoUiRequest noUiRequest = new NoUiRequest(request, "", null); NoUiRequest noUiRequest = new NoUiRequest(request, "", null);
String token = noUiRequest.getToken(); String token = noUiRequest.getToken();
String userId = noUiRequest.getUserId(); String userId = noUiRequest.getUserId();
String terminalType = noUiRequest.getTerminalType(); // APP WEB
// token不存在 // token不存在
if (StringUtil.isEmpty(token)) { if (StringUtil.isEmpty(token)) {
Result rt = new Result(ErrorCodes.LOGIN_TOKEN_ISNULL, "登录token不能为空", null, noUiVersion.getVersion()); // Result rt = new Result(ErrorCodes.LOGIN_TOKEN_ISNULL, "登录token不能为空", null, noUiVersion.getVersion());
responseMessage(response, response.getWriter(), rt); // responseMessage(response, response.getWriter(), rt);
return false; return true;
} }
// userId不存在 // userId不存在
...@@ -47,12 +46,6 @@ public class TokenInterceptor implements HandlerInterceptor { ...@@ -47,12 +46,6 @@ public class TokenInterceptor implements HandlerInterceptor {
return false; return false;
} }
//服务调用
if (token.startsWith(Constants.APP_FLAG)) {
return true;
}
JwtLogin login = JWT.unsign(token, JwtLogin.class); JwtLogin login = JWT.unsign(token, JwtLogin.class);
if (login == null || (!userId.equals((login.getUserId())))) { if (login == null || (!userId.equals((login.getUserId())))) {
Result rt = new Result(ErrorCodes.LOGIN_TOKEN_CHECKERROR, "用户token或ID验证不通过", null, noUiVersion.getVersion()); Result rt = new Result(ErrorCodes.LOGIN_TOKEN_CHECKERROR, "用户token或ID验证不通过", null, noUiVersion.getVersion());
......
cptfre=sureBtn,cpdgrp,cptfre
bctacp=sureBtn,bcdgrp,bctacp
bctfre=sureBtn,bcdgrp,bctfre
bdtfrc=sureBtn,didgrp,bdtfrc
bdtfrd=sureBtn,bddgrp,bdtfrd
bdtdfr=sureBtn,didgrp,bdtdfr
bdtdfd=sureBtn,bddgrp,bdtdfd
bdtsnd=sureBtn,bddgrp,bdtsnd
bdtdsn=sureBtn,didgrp,bdtdsn
botfre=sureBtn,didgrp,bodgrp
bptapn=sureBtn,bodgrp,bptapn
bptapl=sureBtn,bedgrp,bptapl
bptopl=sureBtn,bedgrp,bptopl
bptopc=sureBtn,bodgrp,bptopc
bptrpn=sureBtn,bpdgrp,bptrpn
brtfrc=sureBtn,lidgrp,brtfrc
brtfrd=sureBtn,brdgrp,brtfrd
brtsnd=sureBtn,brdgrp,brtsnd
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment