您的位置:首页 > 编程语言 > Java开发

Spring LocalVariableTableParameterNameDiscoverer 获取方法的参数名称

2017-03-02 10:13 441 查看
使用Spring的 LocalVariableTableParameterNameDiscoverer 获取方法的参数名称

下面的例子是在拦截器里的实现的,也可以在其他的类或方法中实现。

import java.lang.reflect.Method;
import java.util.TreeMap;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import sy.common.exception.LcsTipException;
import sy.common.model.RespModel;
import sy.common.model.ResponseMessage;
import sy.util.BaseUtils;
import sy.util.CheckSign;
import sy.util.GsonUtil;
import sy.util.SessionUtil;
import sy.util.StringUtil;

/**
* 参数拦截器
*/
public class ParamInterceptor extends HandlerInterceptorAdapter {

private static final LocalVariableTableParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer();

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 解决跨域
response.addHeader("Access-Control-Allow-Origin", "*");
HandlerMethod handlerMethod = (HandlerMethod) handler;

Auth authMethod = SessionUtil.getMethod(handlerMethod);
Auth authClass = SessionUtil.getClass(handlerMethod);
boolean accountLogin = this.checkParamSign(authMethod, authClass);
//accountLogin=true;
if (accountLogin && handlerMethod != null) {
String[] methodParams = getMethodParams(handlerMethod.getBeanType().getName(), handlerMethod.getMethod().getName());
if (methodParams != null && methodParams.length > 0) {
TreeMap<String, String> map = new TreeMap<String, String>();
for (String paramName : methodParams) {
String value = request.getParameter(paramName);
System.out.println(paramName + "=" + value);
if (StringUtil.isNotEmpty(paramName) && StringUtil.isNotEmpty(value)) {
map.put(paramName, value);
}else{
System.out.println("签名失败")
return false;
}
}
map.put("sign", request.getParameter("sign"));
System.out.println("去签名");
boolean signFlag = CheckSign.checkSign(map);
if (!signFlag) {
System.out.println("签名失败")
return false;
}
}
}
return super.preHandle(request, response, handler);
}

/**
* 获取方法所有参数名
* @param method
* @return
*/
public static String[] getParameterNames(Method method) {
return parameterNameDiscoverer.getParameterNames(method);
}

public static String[] getMethodParams(String pkgeName, String methodName) throws ClassNotFoundException {
Class<?> aClass = Class.forName(pkgeName);
Method[] methods = aClass.getMethods();
String[] params = null;
for (Method method : methods) {
if (method.getName().equals(methodName)) {
params = getParameterNames(method);
if (params == null || params.length == 0) {
break;
}
StringBuilder sb = new StringBuilder();
sb.append("方法:" + method.getName() + "()  ");
for (int i = 0; i < params.length; i++) {
if (i > 0) {
sb.append(" ,");
}
sb.append(params[i]);
}
System.out.println(sb.toString());
break;
}
}
return params;
}

/**
* 参数签名校验
*/
private boolean checkParamSign(Auth authMethod, Auth authClass) {
if (authMethod != null) {
return authMethod.checkParamSign();
}
if (authClass != null) {
return authClass.checkParamSign();
}
return Auth.checkParamSign_default;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: