Bladeren bron

日志更新

fanxw 5 jaren geleden
bovenliggende
commit
c503d2d271
1 gewijzigde bestanden met toevoegingen van 372 en 301 verwijderingen
  1. 372 301
      src/main/java/com/chinaitop/LogercostInterceptor.java

+ 372 - 301
src/main/java/com/chinaitop/LogercostInterceptor.java

@@ -1,301 +1,372 @@
1
-package com.chinaitop;
2
-
3
-import com.alibaba.fastjson.JSONArray;
4
-import com.alibaba.fastjson.JSONObject;
5
-import com.chinaitop.depot.storage.mapper.SystemLogMapper;
6
-import com.chinaitop.depot.storage.model.SystemLog;
7
-import com.chinaitop.depot.storage.model.SystemLogExample;
8
-import com.chinaitop.depot.storage.utils.RedisUtil;
9
-import org.apache.commons.lang.ObjectUtils;
10
-import org.springframework.beans.factory.annotation.Autowired;
11
-import org.springframework.lang.Nullable;
12
-import org.springframework.web.method.HandlerMethod;
13
-import org.springframework.web.servlet.HandlerInterceptor;
14
-import org.springframework.web.servlet.ModelAndView;
15
-
16
-import javax.servlet.http.HttpServletRequest;
17
-import javax.servlet.http.HttpServletResponse;
18
-import java.util.*;
19
-
20
-/**
21
- * 功能日志拦截器
22
- * 
23
- * @author fanxiongwei
24
- *
25
- */
26
-public class LogercostInterceptor implements HandlerInterceptor {
27
-
28
-	private static String system_index = "库级系统";
29
-
30
-	@Autowired
31
-	private RedisUtil redisUtil;
32
-	
33
-	@Autowired
34
-	private SystemLogMapper systemLogMapper;
35
-
36
-	/**
37
-     * preHandle是在请求执行前执行的
38
-     */
39
-    @Override
40
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
41
-
42
-    	//获取URL
43
-        String url = request.getRequestURI();
44
-    	//注销日志
45
-    	if ("/userInfo/exitLogin".equals(url)) {
46
-    		loginLogger(request, response, url);
47
-    	}
48
-    	
49
-        //System.out.println(butn_list);
50
-        
51
-        //System.out.println("Interception cost="+(System.currentTimeMillis()-start));
52
-        return true;//返回true,postHandler和afterCompletion方法才能执行,否则false为拒绝执行,起到拦截器控制作用
53
-    }
54
-
55
-    /**
56
-     * postHandler是在请求结束之后,视图渲染之前执行的,但只有preHandle方法返回true的时候才会执行
57
-     */
58
-    @Override
59
-    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
60
-    	//获取URL
61
-        String url = request.getRequestURI();
62
-        //获取用户信息和单位信息
63
-        String userJson = ObjectUtils.toString(request.getSession().getAttribute("userInfo"),"");
64
-        String orgInfoJson = ObjectUtils.toString(request.getSession().getAttribute("orgInfo"),"");
65
-        //登录日志
66
-    	if (("/userInfo/login".equals(url) || "/userInfo/exitLogin".equals(url))
67
-    			&& !"".equals(userJson) && !"".equals(orgInfoJson)
68
-    			&& null != userJson && null != orgInfoJson) {
69
-    		loginLogger(request, response, url);
70
-    	}
71
-    	//功能操作和访问日志
72
-    	if (!"/userInfo/login".equals(url) && !"/userInfo/exitLogin".equals(url)
73
-    			&& !"".equals(userJson) && !"".equals(orgInfoJson)
74
-    			&& null != userJson && null != orgInfoJson) {
75
-    		operationLogger(request, response, url, handler);
76
-    	}
77
-    }
78
-
79
-    /**
80
-     * 封装登录信息
81
-     * 
82
-     * @param userJson
83
-     * @param orgInfoJson
84
-     * @return
85
-     */
86
-    private Map<String, String> getUserOrgInfo(String userJson, String orgInfoJson) {
87
-    	Map<String, String> user_map = new HashMap<String, String>();
88
-    	JSONObject userinfo = JSONObject.parseObject(userJson);
89
-    	JSONObject orginfo = JSONObject.parseObject(orgInfoJson);
90
-    	user_map.put("userId", userinfo == null ? "" : userinfo.get("userId")+"");
91
-    	user_map.put("username", userinfo == null ? "" : userinfo.get("username")+"");
92
-    	user_map.put("realName", userinfo == null ? "" : userinfo.get("realName")+"");
93
-    	user_map.put("orgId", userinfo == null ? "" : userinfo.get("orgId")+"");
94
-    	user_map.put("roleName", userinfo == null ? "" : userinfo.get("roleNames")+"");
95
-    	user_map.put("areaName", orginfo == null ? "":ObjectUtils.toString(orginfo.get("areaName")+"",""));
96
-    	user_map.put("orgName", orginfo == null ? "":ObjectUtils.toString(orginfo.get("orgName")+"",""));
97
-		return user_map;
98
-	}
99
-
100
-    /**
101
-     * 登录日志(包含登录与注销)
102
-     * @param request
103
-     * @param response
104
-     */
105
-    private void loginLogger(HttpServletRequest request, HttpServletResponse response, String url) {
106
-    	//获取用户信息和单位信息
107
-        String userJson = ObjectUtils.toString(request.getSession().getAttribute("userInfo"),"");
108
-        String orgInfoJson = ObjectUtils.toString(request.getSession().getAttribute("orgInfo"),"");
109
-    	//登录
110
-        if ("/userInfo/login".equals(url)) {
111
-	    	SystemLog log = new SystemLog();
112
-	    	Map<String, String> user_map = getUserOrgInfo(userJson, orgInfoJson);
113
-			log.setSystemIdentify(system_index);
114
-			log.setUserZh(ObjectUtils.toString(user_map.get("username"),""));//账号
115
-			log.setUserName(ObjectUtils.toString(user_map.get("realName"),""));//名称
116
-			log.setDeviceIp(getClientIpAddress(request));
117
-			log.setDlTime(new Date());
118
-			log.setUserRole(ObjectUtils.toString(user_map.get("roleName"),""));//角色
119
-			log.setOrgId(Integer.parseInt(user_map.get("orgId")));//单位
120
-			log.setUserAddress(user_map.get("areaName"));//行政区划
121
-			log.setId(UUID.randomUUID().toString().replace("-", ""));
122
-			log.setUserId(Integer.parseInt(user_map.get("userId")));
123
-			log.setOperationTime(new Date());//操作时间
124
-			log.setType("1");
125
-
126
-			//添加保存日志
127
-			systemLogMapper.insert(log);
128
-    	}
129
-
130
-        //注销
131
-        if ("/userInfo/exitLogin".equals(url)) {
132
-        	if (null != userJson && null != orgInfoJson
133
-        			&& !"".equals(userJson) && !"".equals(orgInfoJson)) {
134
-        		Map<String, String> user_map = getUserOrgInfo(userJson, orgInfoJson);
135
-        		//修改条件
136
-        		SystemLogExample example = new SystemLogExample();
137
-        		SystemLogExample.Criteria criteria = example.createCriteria();
138
-        		criteria.andUserZhEqualTo(ObjectUtils.toString(user_map.get("username"),""));
139
-        		criteria.andOrgIdEqualTo(Integer.parseInt(user_map.get("orgId")));
140
-        		criteria.andTypeEqualTo("1");
141
-        		example.setOrderByClause(" dl_time desc");
142
-        		List<SystemLog> list = systemLogMapper.selectByExample(example);
143
-
144
-        		if (null != list && list.size() > 0) {
145
-        			//注销时间
146
-        			list.get(0).setZxTime(new Date());
147
-        			list.get(0).setOperationTime(new Date());//操作时间
148
-
149
-        			//修改登录日志信息
150
-        			systemLogMapper.updateByPrimaryKey(list.get(0));
151
-        		}
152
-        	}
153
-    		
154
-    	}
155
-    }
156
-    
157
-    /**
158
-     * 操作日志实现思路:
159
-     * 1、URL要是可以在菜单里面找到对应菜单,那么当前这个操作属于功能操作日志
160
-     * 2、如果没在菜单里面找到对应菜单,却在按钮中找到了,那么就是功能访问日志
161
-     * 3、如果菜单和按钮中都没有找到对应的URL,那么说明当前这个方位没在功能管理里面配置正确,或者没有加入到功能管理中
162
-     * 
163
-     * @param request
164
-     * @param response
165
-     * @param url
166
-     */
167
-    private void operationLogger(HttpServletRequest request, HttpServletResponse response, String url, Object handler) {
168
-    	//获取用户信息和单位信息
169
-        String userJson = ObjectUtils.toString(request.getSession().getAttribute("userInfo"),"");
170
-        String orgInfoJson = ObjectUtils.toString(request.getSession().getAttribute("orgInfo"),"");
171
-        Map<String, String> user_map = getUserOrgInfo(userJson, orgInfoJson);
172
-
173
-        //是否还需要继续往下执行
174
-        boolean flag = false;
175
-
176
-    	//获取菜单权限并且组装功能日志
177
-    	String func_list = (String) redisUtil.get("hasFuncList");
178
-    	JSONArray array = JSONArray.parseArray(func_list);
179
-    	if (null != array && array.size() > 4) {
180
-    		JSONObject object = null;
181
-    		SystemLog log = new SystemLog();
182
-    		for (Iterator iterator = array.iterator(); iterator.hasNext();) {
183
-    			object = (JSONObject) iterator.next();
184
-    			String func_url = ObjectUtils.toString(object.get("funcUrl"));
185
-    			if (url.equals(func_url)) {
186
-    				log.setId(UUID.randomUUID().toString().replace("-", ""));
187
-    				log.setType("3");//功能操作日志
188
-    				log.setSystemIdentify(system_index);//标识
189
-    				log.setUserId(Integer.parseInt(user_map.get("userId")));//用户ID
190
-    				log.setUserZh(ObjectUtils.toString(user_map.get("username"),""));//账号
191
-    				log.setUserName(ObjectUtils.toString(user_map.get("realName"),""));//名称
192
-    				log.setDeviceIp(getClientIpAddress(request));//操作IP
193
-    				log.setFuncName(ObjectUtils.toString(object.get("funcName")));//功能名称
194
-    				log.setOperationTime(new Date());//操作时间
195
-    				log.setUserRole(ObjectUtils.toString(user_map.get("roleName"),""));//角色
196
-    				log.setOrgId(Integer.parseInt(user_map.get("orgId")));//单位
197
-    				log.setUserAddress(user_map.get("areaName"));//行政区划
198
-
199
-    				//添加保存日志
200
-    				systemLogMapper.insert(log);
201
-
202
-    				//已经是操作日志了,那么没必要在遍历按钮了
203
-    				flag = true;
204
-    				//也不用继续当前循环了
205
-    				break;
206
-    			}
207
-    		}
208
-    	}
209
-        //获取按钮权限并且组装访问日志
210
-    	if (!flag) {
211
-    		String perm_list = (String) redisUtil.get("permissionList");
212
-    		JSONArray but_array = JSONArray.parseArray(perm_list);
213
-        	if (null != but_array && but_array.size() > 4) {
214
-        		JSONObject but_object = null;
215
-        		SystemLog log = new SystemLog();
216
-        		for (Iterator iterator = but_array.iterator(); iterator.hasNext();) {
217
-        			but_object = (JSONObject) iterator.next();
218
-        			if (but_object == null) {
219
-        				continue;
220
-        			}
221
-        			String but_url = ObjectUtils.toString(but_object.get("btnUrl"), "");
222
-        			if (url.equals(but_url)) {
223
-        				log.setId(UUID.randomUUID().toString().replace("-", ""));
224
-        				log.setType("2");//功能访问日志
225
-        				log.setSystemIdentify(system_index);//标识
226
-        				log.setUserId(Integer.parseInt(user_map.get("userId")));//用户ID
227
-        				log.setUserZh(ObjectUtils.toString(user_map.get("username"),""));//账号
228
-        				log.setUserName(ObjectUtils.toString(user_map.get("realName"),""));//名称
229
-        				log.setDeviceIp(getClientIpAddress(request));//操作IP
230
-        				String f_name = ObjectUtils.toString(but_object.get("funcName"), "");
231
-        				String b_name = ObjectUtils.toString(but_object.get("btnName"), "");
232
-        				String ramark = ObjectUtils.toString(but_object.get("remark"), "");
233
-        				StringBuffer sbf = new StringBuffer();
234
-        				if (!"".equals(ramark)) {
235
-        					sbf.append(f_name).append("功能").append(ramark).append("操作");
236
-        				} else {
237
-        					sbf.append(f_name).append("功能").append(b_name).append("操作");
238
-        				}
239
-        				log.setFuncName(ObjectUtils.toString(sbf.toString(), ""));//菜单名称
240
-        				HandlerMethod h = (HandlerMethod) handler;  
241
-        				log.setMethodName(h.getMethod().getName());//方法名
242
-        				log.setUserRole(ObjectUtils.toString(user_map.get("roleName"),""));//角色
243
-        				log.setOperationTime(new Date());//操作时间
244
-        				StringBuilder param = new StringBuilder();
245
-                        Map<String,String[]> map = request.getParameterMap();
246
-                        Set<String> key = map.keySet();
247
-                        for (String eachKey: key) {
248
-                            param.append(eachKey+"="+map.get(eachKey)[0]+"; ");
249
-                        }
250
-        				log.setParameter(param.toString());//传入参数
251
-
252
-        				String status = ObjectUtils.toString(response.getStatus(), "");
253
-        				log.setOperResult(status);//操作结果状态
254
-        				if ("200".equals(status)) {
255
-        					log.setRtnParam("请求成功");//返回参数
256
-        				} else {
257
-        					log.setRtnParam("请求失败");//返回参数
258
-        				}
259
-        				log.setOrgId(Integer.parseInt(user_map.get("orgId")));//所属机构
260
-        				log.setUserAddress(user_map.get("areaName"));//行政区划
261
-
262
-        				//添加保存日志
263
-        				systemLogMapper.insert(log);
264
-
265
-        				//中断本次循环
266
-        				break;
267
-        			}
268
-        		}
269
-        	}
270
-    	}
271
-    }
272
-
273
-	/**
274
-     * afterCompletion是视图渲染完成之后才执行,同样需要preHandle返回true,
275
-     */
276
-    @Override
277
-    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
278
-        //该方法通常用于清理资源等工作
279
-    }
280
-
281
-    /**
282
-     * 获取客户端IP
283
-     * 
284
-     * @param request
285
-     * @return
286
-     */
287
-    private String getClientIpAddress(HttpServletRequest request) {  
288
-        String clientIp = request.getHeader("x-forwarded-for");  
289
-        if(clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {  
290
-            clientIp = request.getHeader("Proxy-Client-IP");  
291
-        }  
292
-        if(clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {  
293
-            clientIp = request.getHeader("WL-Proxy-Client-IP");  
294
-        }  
295
-        if(clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {  
296
-            clientIp = request.getRemoteAddr();  
297
-        }  
298
-        return "0:0:0:0:0:0:0:1".equals(clientIp) ? "127.0.0.1" : clientIp;  
299
-    }
300
-
301
-}
1
+package com.chinaitop;
2
+
3
+import java.io.IOException;
4
+import java.util.Date;
5
+import java.util.HashMap;
6
+import java.util.Iterator;
7
+import java.util.List;
8
+import java.util.Map;
9
+import java.util.Set;
10
+import java.util.UUID;
11
+
12
+import javax.servlet.http.HttpServletRequest;
13
+import javax.servlet.http.HttpServletResponse;
14
+
15
+import org.apache.commons.lang.ObjectUtils;
16
+import org.apache.http.HttpResponse;
17
+import org.apache.http.HttpStatus;
18
+import org.apache.http.client.HttpClient;
19
+import org.apache.http.client.methods.HttpGet;
20
+import org.apache.http.impl.client.DefaultHttpClient;
21
+import org.apache.http.util.EntityUtils;
22
+import org.springframework.beans.factory.annotation.Autowired;
23
+import org.springframework.lang.Nullable;
24
+import org.springframework.web.method.HandlerMethod;
25
+import org.springframework.web.servlet.HandlerInterceptor;
26
+import org.springframework.web.servlet.ModelAndView;
27
+
28
+import com.alibaba.fastjson.JSONArray;
29
+import com.alibaba.fastjson.JSONObject;
30
+import com.chinaitop.depot.storage.mapper.SystemLogMapper;
31
+import com.chinaitop.depot.storage.model.SystemLog;
32
+import com.chinaitop.depot.storage.model.SystemLogExample;
33
+import com.chinaitop.depot.storage.utils.RedisUtil;
34
+
35
+/**
36
+ * 功能日志拦截器
37
+ * 
38
+ * @author fanxiongwei
39
+ *
40
+ */
41
+public class LogercostInterceptor implements HandlerInterceptor {
42
+
43
+	private static String system_index = "库级系统";
44
+
45
+	@Autowired
46
+	private RedisUtil redisUtil;
47
+	
48
+	@Autowired
49
+	private SystemLogMapper systemLogMapper;
50
+
51
+	/**
52
+     * preHandle是在请求执行前执行的
53
+     */
54
+    @Override
55
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
56
+
57
+    	//获取URL
58
+        String url = request.getRequestURI();
59
+    	//注销日志
60
+    	if ("/userInfo/exitLogin".equals(url)) {
61
+    		loginLogger(request, response, url);
62
+    	}
63
+
64
+        return true;//返回true,postHandler和afterCompletion方法才能执行,否则false为拒绝执行,起到拦截器控制作用
65
+    }
66
+
67
+    /**
68
+     * postHandler是在请求结束之后,视图渲染之前执行的,但只有preHandle方法返回true的时候才会执行
69
+     */
70
+    @Override
71
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
72
+    	//获取URL
73
+        String url = request.getRequestURI();
74
+        //获取用户信息和单位信息
75
+        String userJson = ObjectUtils.toString(request.getSession().getAttribute("userInfo"),"");
76
+        String orgInfoJson = ObjectUtils.toString(request.getSession().getAttribute("orgInfo"),"");
77
+        //登录日志
78
+    	if (("/userInfo/login".equals(url) || "/userInfo/exitLogin".equals(url))
79
+    			&& !"".equals(userJson) && !"".equals(orgInfoJson)
80
+    			&& null != userJson && null != orgInfoJson) {
81
+    		loginLogger(request, response, url);
82
+    	}
83
+    	//功能操作和访问日志
84
+    	if (!"/userInfo/login".equals(url) && !"/userInfo/exitLogin".equals(url)
85
+    			&& !"".equals(userJson) && !"".equals(orgInfoJson)
86
+    			&& null != userJson && null != orgInfoJson) {
87
+    		operationLogger(request, response, url, handler);
88
+    	}
89
+    }
90
+
91
+    /**
92
+     * 封装登录信息
93
+     * 
94
+     * @param userJson
95
+     * @param orgInfoJson
96
+     * @return
97
+     */
98
+    private Map<String, String> getUserOrgInfo(String userJson, String orgInfoJson) {
99
+    	Map<String, String> user_map = new HashMap<String, String>();
100
+    	JSONObject userinfo = JSONObject.parseObject(userJson);
101
+    	JSONObject orginfo = JSONObject.parseObject(orgInfoJson);
102
+    	user_map.put("userId", userinfo == null ? "" : userinfo.get("userId")+"");
103
+    	user_map.put("username", userinfo == null ? "" : userinfo.get("username")+"");
104
+    	user_map.put("realName", userinfo == null ? "" : userinfo.get("realName")+"");
105
+    	user_map.put("orgId", userinfo == null ? "" : userinfo.get("orgId")+"");
106
+    	user_map.put("roleName", userinfo == null ? "" : userinfo.get("roleNames")+"");
107
+    	user_map.put("areaCode", orginfo == null ? "":ObjectUtils.toString(orginfo.get("areaCode")+"",""));
108
+    	user_map.put("areaName", orginfo == null ? "":ObjectUtils.toString(orginfo.get("areaName")+"",""));
109
+    	user_map.put("orgName", orginfo == null ? "":ObjectUtils.toString(orginfo.get("orgName")+"",""));
110
+		return user_map;
111
+	}
112
+
113
+    /**
114
+     * 登录日志(包含登录与注销)
115
+     * @param request
116
+     * @param response
117
+     */
118
+    private void loginLogger(HttpServletRequest request, HttpServletResponse response, String url) {
119
+    	//获取用户信息和单位信息
120
+        String userJson = ObjectUtils.toString(request.getSession().getAttribute("userInfo"),"");
121
+        String orgInfoJson = ObjectUtils.toString(request.getSession().getAttribute("orgInfo"),"");
122
+    	//登录
123
+        if ("/userInfo/login".equals(url)) {
124
+	    	SystemLog log = new SystemLog();
125
+	    	Map<String, String> user_map = getUserOrgInfo(userJson, orgInfoJson);
126
+			log.setSystemIdentify(system_index);
127
+			log.setUserZh(ObjectUtils.toString(user_map.get("username"),""));//账号
128
+			log.setUserName(ObjectUtils.toString(user_map.get("realName"),""));//名称
129
+			String device_ip = getClientIpAddress(request);
130
+			log.setDeviceIp(device_ip);
131
+			log.setDlTime(new Date());
132
+			log.setUserRole(ObjectUtils.toString(user_map.get("roleName"),""));//角色
133
+			log.setOrgId(Integer.parseInt(user_map.get("orgId")));//单位
134
+			String enumid = ObjectUtils.toString(user_map.get("areaCode"), "0");
135
+			if (!"0".equals(enumid)) {
136
+				String httpurl = "http://"+device_ip+":9022/Enum/findByEnum?id="+Integer.parseInt(enumid);
137
+				String strResult = doGet(httpurl);
138
+				if (!"".equals(strResult)) {
139
+					JSONObject enum_obj = JSONObject.parseObject(strResult);
140
+					log.setUserAddress(ObjectUtils.toString(enum_obj.get("gbcode"), ""));//行政区划
141
+				}
142
+			}
143
+			log.setId(UUID.randomUUID().toString().replace("-", ""));
144
+			log.setUserId(Integer.parseInt(user_map.get("userId")));
145
+			log.setOperationTime(new Date());//操作时间
146
+			log.setType("1");
147
+
148
+			//添加保存日志
149
+			systemLogMapper.insert(log);
150
+    	}
151
+
152
+        //注销
153
+        if ("/userInfo/exitLogin".equals(url)) {
154
+        	if (null != userJson && null != orgInfoJson
155
+        			&& !"".equals(userJson) && !"".equals(orgInfoJson)) {
156
+        		Map<String, String> user_map = getUserOrgInfo(userJson, orgInfoJson);
157
+        		//修改条件
158
+        		SystemLogExample example = new SystemLogExample();
159
+        		SystemLogExample.Criteria criteria = example.createCriteria();
160
+        		criteria.andUserZhEqualTo(ObjectUtils.toString(user_map.get("username"),""));
161
+        		criteria.andOrgIdEqualTo(Integer.parseInt(user_map.get("orgId")));
162
+        		criteria.andTypeEqualTo("1");
163
+        		example.setOrderByClause(" dl_time desc");
164
+        		List<SystemLog> list = systemLogMapper.selectByExample(example);
165
+
166
+        		if (null != list && list.size() > 0) {
167
+        			//注销时间
168
+        			list.get(0).setZxTime(new Date());
169
+        			list.get(0).setOperationTime(new Date());//操作时间
170
+
171
+        			//修改登录日志信息
172
+        			systemLogMapper.updateByPrimaryKey(list.get(0));
173
+        		}
174
+        	}
175
+    		
176
+    	}
177
+    }
178
+    
179
+    /**
180
+     * get请求
181
+     * @return
182
+     */
183
+    public static String doGet(String url) {
184
+        try {
185
+            HttpClient client = new DefaultHttpClient();
186
+            //发送get请求
187
+            HttpGet request = new HttpGet(url);
188
+            HttpResponse response = client.execute(request);
189
+
190
+            /**请求发送成功,并得到响应**/
191
+            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
192
+                /**读取服务器返回过来的json字符串数据**/
193
+                String strResult = EntityUtils.toString(response.getEntity());
194
+
195
+                return strResult;
196
+            }
197
+        }
198
+        catch (IOException e) {
199
+            e.printStackTrace();
200
+        }
201
+
202
+        return null;
203
+    }
204
+    
205
+    /**
206
+     * 操作日志实现思路:
207
+     * 1、URL要是可以在菜单里面找到对应菜单,那么当前这个操作属于功能操作日志
208
+     * 2、如果没在菜单里面找到对应菜单,却在按钮中找到了,那么就是功能访问日志
209
+     * 3、如果菜单和按钮中都没有找到对应的URL,那么说明当前这个方位没在功能管理里面配置正确,或者没有加入到功能管理中
210
+     * 
211
+     * @param request
212
+     * @param response
213
+     * @param url
214
+     */
215
+    @SuppressWarnings("all")
216
+	private void operationLogger(HttpServletRequest request, HttpServletResponse response, String url, Object handler) {
217
+    	//获取用户信息和单位信息
218
+        String userJson = ObjectUtils.toString(request.getSession().getAttribute("userInfo"),"");
219
+        String orgInfoJson = ObjectUtils.toString(request.getSession().getAttribute("orgInfo"),"");
220
+        Map<String, String> user_map = getUserOrgInfo(userJson, orgInfoJson);
221
+
222
+        //是否还需要继续往下执行
223
+        boolean flag = false;
224
+
225
+    	//获取菜单权限并且组装功能日志
226
+    	String func_list = (String) redisUtil.get("hasFuncList");
227
+    	JSONArray array = JSONArray.parseArray(func_list);
228
+    	if (null != array && array.size() > 4) {
229
+    		JSONObject object = null;
230
+    		SystemLog log = new SystemLog();
231
+    		for (Iterator iterator = array.iterator(); iterator.hasNext();) {
232
+    			object = (JSONObject) iterator.next();
233
+    			String func_url = ObjectUtils.toString(object.get("funcUrl"));
234
+    			if (url.equals(func_url)) {
235
+    				log.setId(UUID.randomUUID().toString().replace("-", ""));
236
+    				log.setType("3");//功能访问日志
237
+    				log.setSystemIdentify(system_index);//标识
238
+    				log.setUserId(Integer.parseInt(user_map.get("userId")));//用户ID
239
+    				log.setUserZh(ObjectUtils.toString(user_map.get("username"),""));//账号
240
+    				log.setUserName(ObjectUtils.toString(user_map.get("realName"),""));//名称
241
+    				String device_ip = getClientIpAddress(request);
242
+    				log.setDeviceIp(device_ip);//操作IP
243
+    				log.setFuncId(Integer.parseInt(object.get("funcId").toString()));//功能ID
244
+    				log.setFuncName(ObjectUtils.toString(object.get("funcName")));//功能名称
245
+    				log.setOperationTime(new Date());//操作时间
246
+    				log.setUserRole(ObjectUtils.toString(user_map.get("roleName"),""));//角色
247
+    				log.setOrgId(Integer.parseInt(user_map.get("orgId")));//单位
248
+    				
249
+    				String enumid = ObjectUtils.toString(user_map.get("areaCode"), "0");
250
+    				if (!"0".equals(enumid)) {
251
+    					String httpurl = "http://"+device_ip+":9022/Enum/findByEnum?id="+Integer.parseInt(enumid);
252
+    					String strResult = doGet(httpurl);
253
+    					if (!"".equals(strResult)) {
254
+    						JSONObject enum_obj = JSONObject.parseObject(strResult);
255
+    						log.setUserAddress(ObjectUtils.toString(enum_obj.get("gbcode"), ""));//行政区划
256
+    					}
257
+    				}
258
+
259
+    				//添加保存日志
260
+    				systemLogMapper.insert(log);
261
+
262
+    				//已经是操作日志了,那么没必要在遍历按钮了
263
+    				flag = true;
264
+    				//也不用继续当前循环了
265
+    				break;
266
+    			}
267
+    		}
268
+    	}
269
+        //获取按钮权限并且组装访问日志
270
+    	if (!flag) {
271
+    		String perm_list = (String) redisUtil.get("permissionList");
272
+    		JSONArray but_array = JSONArray.parseArray(perm_list);
273
+        	if (null != but_array && but_array.size() > 4) {
274
+        		JSONObject but_object = null;
275
+        		SystemLog log = new SystemLog();
276
+        		for (Iterator iterator = but_array.iterator(); iterator.hasNext();) {
277
+        			but_object = (JSONObject) iterator.next();
278
+        			if (but_object == null) {
279
+        				continue;
280
+        			}
281
+        			String but_url = ObjectUtils.toString(but_object.get("btnUrl"), "");
282
+        			if (url.equals(but_url)) {
283
+        				log.setId(UUID.randomUUID().toString().replace("-", ""));
284
+        				log.setType("2");//功能操作日志
285
+        				log.setSystemIdentify(system_index);//标识
286
+        				log.setUserId(Integer.parseInt(user_map.get("userId")));//用户ID
287
+        				log.setUserZh(ObjectUtils.toString(user_map.get("username"),""));//账号
288
+        				log.setUserName(ObjectUtils.toString(user_map.get("realName"),""));//名称
289
+        				String device_ip = getClientIpAddress(request);
290
+        				log.setDeviceIp(device_ip);//操作IP
291
+        				String f_name = ObjectUtils.toString(but_object.get("funcName"), "");
292
+        				String b_name = ObjectUtils.toString(but_object.get("btnName"), "");
293
+        				String ramark = ObjectUtils.toString(but_object.get("remark"), "");
294
+        				StringBuffer sbf = new StringBuffer();
295
+        				if (!"".equals(ramark)) {
296
+        					sbf.append(f_name).append("功能").append(ramark).append("操作");
297
+        				} else {
298
+        					sbf.append(f_name).append("功能").append(b_name).append("操作");
299
+        				}
300
+        				log.setFuncId(Integer.parseInt(but_object.get("funcId").toString()));//功能ID
301
+        				log.setFuncName(ObjectUtils.toString(sbf.toString(), ""));//菜单名称
302
+        				HandlerMethod h = (HandlerMethod) handler;  
303
+        				log.setMethodName(h.getMethod().getName());//方法名
304
+        				log.setBtnId(Integer.parseInt(but_object.get("btnId").toString()));//按钮ID
305
+        				log.setUserRole(ObjectUtils.toString(user_map.get("roleName"),""));//角色
306
+        				log.setOperationTime(new Date());//操作时间
307
+        				StringBuilder param = new StringBuilder();
308
+                        Map<String,String[]> map = request.getParameterMap();
309
+                        Set<String> key = map.keySet();
310
+                        for (String eachKey: key) {
311
+                            param.append(eachKey+"="+map.get(eachKey)[0]+"; ");
312
+                        }
313
+        				log.setParameter(param.toString());//传入参数
314
+
315
+        				String status = ObjectUtils.toString(response.getStatus(), "");
316
+        				log.setOperResult(status);//操作结果状态
317
+        				if ("200".equals(status)) {
318
+        					log.setRtnParam("请求成功");//返回参数
319
+        				} else {
320
+        					log.setRtnParam("请求失败");//返回参数
321
+        				}
322
+        				log.setOrgId(Integer.parseInt(user_map.get("orgId")));//所属机构
323
+        				String enumid = ObjectUtils.toString(user_map.get("areaCode"), "0");
324
+        				if (!"0".equals(enumid)) {
325
+        					String httpurl = "http://"+device_ip+":9022/Enum/findByEnum?id="+Integer.parseInt(enumid);
326
+        					String strResult = doGet(httpurl);
327
+        					if (!"".equals(strResult)) {
328
+        						JSONObject enum_obj = JSONObject.parseObject(strResult);
329
+        						log.setUserAddress(ObjectUtils.toString(enum_obj.get("gbcode"), ""));//行政区划
330
+        					}
331
+        				}
332
+
333
+        				//添加保存日志
334
+        				systemLogMapper.insert(log);
335
+
336
+        				//中断本次循环
337
+        				break;
338
+        			}
339
+        		}
340
+        	}
341
+    	}
342
+    }
343
+
344
+	/**
345
+     * afterCompletion是视图渲染完成之后才执行,同样需要preHandle返回true,
346
+     */
347
+    @Override
348
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
349
+        //该方法通常用于清理资源等工作
350
+    }
351
+
352
+    /**
353
+     * 获取客户端IP
354
+     * 
355
+     * @param request
356
+     * @return
357
+     */
358
+    private String getClientIpAddress(HttpServletRequest request) {  
359
+        String clientIp = request.getHeader("x-forwarded-for");  
360
+        if(clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {  
361
+            clientIp = request.getHeader("Proxy-Client-IP");  
362
+        }  
363
+        if(clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {  
364
+            clientIp = request.getHeader("WL-Proxy-Client-IP");  
365
+        }  
366
+        if(clientIp == null || clientIp.length() == 0 || "unknown".equalsIgnoreCase(clientIp)) {  
367
+            clientIp = request.getRemoteAddr();  
368
+        }  
369
+        return "0:0:0:0:0:0:0:1".equals(clientIp) ? "127.0.0.1" : clientIp;  
370
+    }
371
+
372
+}