Java获取系统属性、环境变量和反射获取当前请求内容
获取环境变量:
System.getenv()
获取系统属性:
System.getProperties()
反射调用ServletRequest和HttpServletRequest的get方法获取请求数据:
ServletRequest sr= (ServletRequest)request; Method[] cm = request.getClass().getDeclaredMethods(); Method[] rm = sr.getClass().getDeclaredMethods();
Invoke的时候应该用当前的request而不是newInstance():
m.invoke(request, new Object[]{})
代码:
/** * Server info * @param request * @return */ public Map<String,Object> getServerInfo(HttpServletRequest request){ Map<String,Object> map = new HashMap<String, Object>(), sp = new HashMap<String, Object>(), req = new HashMap<String, Object>(); map.put("env", System.getenv()); for(Object s:System.getProperties().keySet()){ sp.put((String) s, System.getProperty((String)s)); } map.put("property", sp); try { ServletRequest sr= (ServletRequest)request; Method[] cm = request.getClass().getDeclaredMethods(); Method[] rm = sr.getClass().getDeclaredMethods(); for(Method m:cm){ m.setAccessible(true); if(m.getName().startsWith("get")&&!Pattern.compile("getInputStream|getReader").matcher(m.getName()).find()&& m.getName().indexOf("")==-1&&m.getParameterTypes().length==0){ req.put(m.getName(),""+m.invoke(request, new Object[]{})); } } for(Method m:rm){ m.setAccessible(true); if(m.getName().startsWith("get")&&!Pattern.compile("getInputStream|getReader").matcher(m.getName()).find()&& m.getParameterTypes().length==0){ req.put(m.getName(),""+m.invoke(request, new Object[]{})); } } }catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return map; }