Parcourir la source

系统安全性优化,登陆Token写Cookie时进行MD5加密;

xuxueli il y a 7 ans
Parent
révision
3569b1422c

+ 1 - 1
doc/XXL-JOB官方文档.md Voir le fichier

@@ -1101,7 +1101,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
1101 1101
 - 24、Log地址格式兼容,支持非"/"结尾路径配置;
1102 1102
 - 25、底层系统日志级别规范调整,清理遗留代码;
1103 1103
 - 26、建表SQL优化,支持同步创建制定编码的库和表;
1104
-
1104
+- 27、系统安全性优化,登陆Token写Cookie时进行MD5加密;
1105 1105
 
1106 1106
 
1107 1107
 ### TODO LIST

+ 15 - 13
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java Voir le fichier

@@ -2,7 +2,6 @@ package com.xxl.job.admin.controller;
2 2
 
3 3
 import com.xxl.job.admin.controller.annotation.PermessionLimit;
4 4
 import com.xxl.job.admin.controller.interceptor.PermissionInterceptor;
5
-import com.xxl.job.admin.core.util.PropertiesUtil;
6 5
 import com.xxl.job.admin.service.XxlJobService;
7 6
 import com.xxl.job.core.biz.model.ReturnT;
8 7
 import org.apache.commons.lang3.StringUtils;
@@ -61,18 +60,21 @@ public class IndexController {
61 60
 	@ResponseBody
62 61
 	@PermessionLimit(limit=false)
63 62
 	public ReturnT<String> loginDo(HttpServletRequest request, HttpServletResponse response, String userName, String password, String ifRemember){
64
-		if (!PermissionInterceptor.ifLogin(request)) {
65
-			if (StringUtils.isNotBlank(userName) && StringUtils.isNotBlank(password)
66
-					&& PropertiesUtil.getString("xxl.job.login.username").equals(userName)
67
-					&& PropertiesUtil.getString("xxl.job.login.password").equals(password)) {
68
-				boolean ifRem = false;
69
-				if (StringUtils.isNotBlank(ifRemember) && "on".equals(ifRemember)) {
70
-					ifRem = true;
71
-				}
72
-				PermissionInterceptor.login(response, ifRem);
73
-			} else {
74
-				return new ReturnT<String>(500, "账号或密码错误");
75
-			}
63
+		// valid
64
+		if (PermissionInterceptor.ifLogin(request)) {
65
+			return ReturnT.SUCCESS;
66
+		}
67
+
68
+		// param
69
+		if (StringUtils.isBlank(userName) || StringUtils.isBlank(password)){
70
+			return new ReturnT<String>(500, "账号或密码为空");
71
+		}
72
+		boolean ifRem = (StringUtils.isNotBlank(ifRemember) && "on".equals(ifRemember))?true:false;
73
+
74
+		// do login
75
+		boolean loginRet = PermissionInterceptor.login(response, userName, password, ifRem);
76
+		if (!loginRet) {
77
+			return new ReturnT<String>(500, "账号或密码错误");
76 78
 		}
77 79
 		return ReturnT.SUCCESS;
78 80
 	}

+ 18 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java Voir le fichier

@@ -3,6 +3,7 @@ package com.xxl.job.admin.controller.interceptor;
3 3
 import com.xxl.job.admin.controller.annotation.PermessionLimit;
4 4
 import com.xxl.job.admin.core.util.CookieUtil;
5 5
 import com.xxl.job.admin.core.util.PropertiesUtil;
6
+import org.apache.commons.codec.digest.DigestUtils;
6 7
 import org.springframework.web.method.HandlerMethod;
7 8
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
8 9
 
@@ -22,11 +23,25 @@ public class PermissionInterceptor extends HandlerInterceptorAdapter {
22 23
     static {
23 24
         String username = PropertiesUtil.getString("xxl.job.login.username");
24 25
         String password = PropertiesUtil.getString("xxl.job.login.password");
25
-        String temp = username + "_" + password;
26
-        LOGIN_IDENTITY_TOKEN = new BigInteger(1, temp.getBytes()).toString(16);
26
+
27
+        // login token
28
+        String tokenTmp = DigestUtils.md5Hex(username + "_" + password);
29
+		tokenTmp = new BigInteger(1, tokenTmp.getBytes()).toString(16);
30
+
31
+		LOGIN_IDENTITY_TOKEN = tokenTmp;
27 32
     }
28 33
 	
29
-	public static boolean login(HttpServletResponse response, boolean ifRemember){
34
+	public static boolean login(HttpServletResponse response, String username, String password, boolean ifRemember){
35
+
36
+    	// login token
37
+		String tokenTmp = DigestUtils.md5Hex(username + "_" + password);
38
+		tokenTmp = new BigInteger(1, tokenTmp.getBytes()).toString(16);
39
+
40
+		if (!LOGIN_IDENTITY_TOKEN.equals(tokenTmp)){
41
+			return false;
42
+		}
43
+
44
+		// do login
30 45
 		CookieUtil.set(response, LOGIN_IDENTITY_KEY, LOGIN_IDENTITY_TOKEN, ifRemember);
31 46
 		return true;
32 47
 	}

+ 0 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/CookieUtil.java Voir le fichier

@@ -87,7 +87,6 @@ public class CookieUtil {
87 87
 	 * @param request
88 88
 	 * @param response
89 89
 	 * @param key
90
-	 * @param domainName
91 90
 	 */
92 91
 	public static void remove(HttpServletRequest request, HttpServletResponse response, String key) {
93 92
 		Cookie cookie = get(request, key);