fanxw 5 lat temu
rodzic
commit
1e11ae6937

+ 0 - 27
src/main/java/com/chinaitop/InterceptorConfig.java

@@ -1,27 +0,0 @@
1
-package com.chinaitop;
2
-
3
-import org.springframework.context.annotation.Bean;
4
-import org.springframework.context.annotation.Configuration;
5
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
6
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
7
-
8
-@Configuration
9
-public class InterceptorConfig extends WebMvcConfigurationSupport {
10
-
11
-	@Bean
12
-	public LogercostInterceptor getInterceptor() {
13
-		return new LogercostInterceptor();
14
-	}
15
-	/**
16
-     * interceptor配置
17
-     */
18
-    @Override
19
-    public void addInterceptors(InterceptorRegistry registry) {
20
-
21
-    	//添加需要验证登录用户操作权限的请求
22
-        registry.addInterceptor(getInterceptor()).addPathPatterns("/**");
23
-
24
-        //这里可以用registry.addInterceptor添加多个拦截器实例,后面加上匹配模式
25
-        //super.addInterceptors(registry);//最后将register往这里塞进去就可以了
26
-    }
27
-}

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

@@ -1,372 +0,0 @@
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.basic.mapper.SystemLogMapper;
31
-import com.chinaitop.depot.basic.model.SystemLog;
32
-import com.chinaitop.depot.basic.model.SystemLogExample;
33
-import com.chinaitop.depot.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://localhost: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://localhost: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://localhost: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
-}