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; } }
相关文章推荐
- java获取方法的参数名称列表
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- Java获取函数参数名称的几种方法
- Spring获取方法参数名称的分析
- java获取方法参数名称
- js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法
- JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法
- spring aop 利用JoinPoint获取参数的值和方法名称
- 菜鸟学习Spring——60s利用JoinPoint(连接点)获取参数的值和方法名称()
- java反射获取方法名称,参数类型
- Unity获取方法的参数和方法名称
- 获取方法参数名称
- 菜鸟学习Spring——60s利用JoinPoint获取参数的值和方法名称
- Java 8中如何获取参数名称的方法示例
- JoinPoint获取参数的方法和名称(1)
- JDK 8 获取编译后Class中方法参数中的名称
- Java如何获取方法参数中的名称
- 运行时在方法内部获取该方法的名称及参数相关信息
- java8获取方法的参数名称
- java反射获取方法参数名称