Commit c78d2e93 authored by 技术部-任文超's avatar 技术部-任文超

漏洞修复一波

parent 9671a3b6
...@@ -6,26 +6,26 @@ package cn.quantgroup.user.enums; ...@@ -6,26 +6,26 @@ package cn.quantgroup.user.enums;
public enum MaritalStatus { public enum MaritalStatus {
UNKNOWN("未知"), UNKNOWN("未知"),
SINGLE("未婚"), // 1 SINGLE("未婚"),
MARRIED("已婚"), // 2 MARRIED("已婚"),
DIVORCED("离异"), // 3 DIVORCED("离异"),
WINDOWED("丧偶"), // 4 WINDOWED("丧偶"),
OTHER("其他"); OTHER("其他");
String description; private String desc;
MaritalStatus(String desc) { MaritalStatus(String desc) {
description = desc; this.desc = desc;
} }
public String getDescription() { public String getDesc() {
return description; return desc;
} }
@Override @Override
public String toString() { public String toString() {
String sb = "MaritalStatus{" + "description='" + description + '\'' + String sb = "MaritalStatus{" + "desc='" + desc + '\'' +
'}'; '}';
return sb; return sb;
} }
......
...@@ -15,19 +15,19 @@ public enum Relation { ...@@ -15,19 +15,19 @@ public enum Relation {
SELF("本人"), SELF("本人"),
OTHER("其他"); OTHER("其他");
String description; private String desc;
Relation(String desc) { Relation(String desc) {
description = desc; this.desc = desc;
} }
public String getDescription() { public String getDesc() {
return description; return desc;
} }
@Override @Override
public String toString() { public String toString() {
String sb = "Relation{" + "description='" + description + '\'' + String sb = "Relation{" + "desc='" + desc + '\'' +
'}'; '}';
return sb; return sb;
} }
......
...@@ -6,6 +6,7 @@ import cn.quantgroup.xyqb.model.JsonResult; ...@@ -6,6 +6,7 @@ import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.thirdparty.jcaptcha.AbstractManageableImageCaptchaService; import cn.quantgroup.xyqb.thirdparty.jcaptcha.AbstractManageableImageCaptchaService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
...@@ -28,9 +29,10 @@ import java.util.UUID; ...@@ -28,9 +29,10 @@ import java.util.UUID;
* @author 李宁 * @author 李宁
* @version 1.0.0 创建时间:15/11/17 11:49 修改人: 修改时间:15/11/17 11:49 修改备注: * @version 1.0.0 创建时间:15/11/17 11:49 修改人: 修改时间:15/11/17 11:49 修改备注:
*/ */
@Api(value = "/api", description = "叫Api, 实际上是图形验证码. 你说神奇不神奇...")
@Slf4j
@RestController @RestController
@RequestMapping("/api") @RequestMapping("/api")
@Api(value = "/api", description = "叫Api, 实际上是图形验证码. 你说神奇不神奇...")
public class ImageCaptchaController { public class ImageCaptchaController {
private static final String IMAGE_FORMAT_PNG = "png"; private static final String IMAGE_FORMAT_PNG = "png";
...@@ -51,14 +53,12 @@ public class ImageCaptchaController { ...@@ -51,14 +53,12 @@ public class ImageCaptchaController {
BufferedImage challenge = imageCaptchaService.getImageChallengeForID(Constants.IMAGE_CAPTCHA_KEY + imageId, request.getLocale()); BufferedImage challenge = imageCaptchaService.getImageChallengeForID(Constants.IMAGE_CAPTCHA_KEY + imageId, request.getLocale());
ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream(); ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
try { try {
boolean write = ImageIO.write(challenge, IMAGE_FORMAT_PNG, jpegOutputStream); ImageIO.write(challenge, IMAGE_FORMAT_PNG, jpegOutputStream);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); log.error("图形验证码图片流返回失败", e);
return JsonResult.buildErrorStateResult("", Constants.CHECK_FAIL); return JsonResult.buildErrorStateResult("", Constants.CHECK_FAIL);
} }
String imageBase64 = Base64.encodeBase64String(jpegOutputStream.toByteArray()); String imageBase64 = Base64.encodeBase64String(jpegOutputStream.toByteArray());
Map<String, String> data = new HashMap<>(); Map<String, String> data = new HashMap<>();
data.put("imageId", imageId); data.put("imageId", imageId);
data.put("image", String.format(IMG_BASE64_PATTREN, imageBase64)); data.put("image", String.format(IMG_BASE64_PATTREN, imageBase64));
......
...@@ -2,14 +2,15 @@ package cn.quantgroup.xyqb.controller.internal.user; ...@@ -2,14 +2,15 @@ package cn.quantgroup.xyqb.controller.internal.user;
import cn.quantgroup.tech.db.DSType; import cn.quantgroup.tech.db.DSType;
import cn.quantgroup.tech.db.TargetDataSource; import cn.quantgroup.tech.db.TargetDataSource;
import cn.quantgroup.user.enums.Relation; import cn.quantgroup.user.enums.*;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.accessable.IpValidator; import cn.quantgroup.xyqb.aspect.accessable.IpValidator;
import cn.quantgroup.xyqb.controller.IBaseController; import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.*; import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.xyqb.entity.enumerate.*;
import cn.quantgroup.xyqb.exception.UserNotExistException; import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.model.*; import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.model.Gender;
import cn.quantgroup.xyqb.model.IdType;
import cn.quantgroup.xyqb.service.api.IUserApiService; import cn.quantgroup.xyqb.service.api.IUserApiService;
import cn.quantgroup.xyqb.service.auth.IIdCardService; import cn.quantgroup.xyqb.service.auth.IIdCardService;
import cn.quantgroup.xyqb.service.merchant.IMerchantService; import cn.quantgroup.xyqb.service.merchant.IMerchantService;
...@@ -755,7 +756,7 @@ public class InnerController implements IBaseController { ...@@ -755,7 +756,7 @@ public class InnerController implements IBaseController {
UserExtInfo extInfo = userExtInfoService.findByUserId(user.getId()); UserExtInfo extInfo = userExtInfoService.findByUserId(user.getId());
if (Objects.nonNull(extInfo)) { if (Objects.nonNull(extInfo)) {
// 婚姻状态 // 婚姻状态
bean.setMarryStatus(Optional.ofNullable(extInfo.getMarryStatus()).orElse(cn.quantgroup.user.enums.MaritalStatus.UNKNOWN).getDescription()); bean.setMarryStatus(Optional.ofNullable(extInfo.getMarryStatus()).orElse(cn.quantgroup.user.enums.MaritalStatus.UNKNOWN).getDesc());
// 受教育程度 // 受教育程度
bean.setEducationEnum(Optional.ofNullable(extInfo.getEducationEnum()).orElse(cn.quantgroup.user.enums.EducationEnum.UNKNOWN).getName()); bean.setEducationEnum(Optional.ofNullable(extInfo.getEducationEnum()).orElse(cn.quantgroup.user.enums.EducationEnum.UNKNOWN).getName());
// 职业 // 职业
...@@ -856,9 +857,9 @@ public class InnerController implements IBaseController { ...@@ -856,9 +857,9 @@ public class InnerController implements IBaseController {
bean.setOccupationEnum(extInfo.getOccupationEnum().getName()); bean.setOccupationEnum(extInfo.getOccupationEnum().getName());
} }
if (null == extInfo.getMarryStatus()) { if (null == extInfo.getMarryStatus()) {
bean.setMarryStatus(cn.quantgroup.user.enums.MaritalStatus.UNKNOWN.getDescription()); bean.setMarryStatus(cn.quantgroup.user.enums.MaritalStatus.UNKNOWN.getDesc());
} else { } else {
bean.setMarryStatus(extInfo.getMarryStatus().getDescription()); bean.setMarryStatus(extInfo.getMarryStatus().getDesc());
} }
} }
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(contacts)) { if (org.apache.commons.collections.CollectionUtils.isNotEmpty(contacts)) {
...@@ -878,7 +879,7 @@ public class InnerController implements IBaseController { ...@@ -878,7 +879,7 @@ public class InnerController implements IBaseController {
ret.setUserId(c.getUserId()); ret.setUserId(c.getUserId());
ret.setName(c.getName()); ret.setName(c.getName());
ret.setPhoneNo(c.getPhoneNo()); ret.setPhoneNo(c.getPhoneNo());
ret.setRelation(c.getRelation().getDescription()); ret.setRelation(c.getRelation().getDesc());
return ret; return ret;
} }
......
...@@ -8,8 +8,6 @@ import javax.persistence.*; ...@@ -8,8 +8,6 @@ import javax.persistence.*;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Timestamp; import java.sql.Timestamp;
//import cn.quantgroup.xyqb.entity.enumerate.*;
/** /**
* Created by 11 on 2016/12/30. * Created by 11 on 2016/12/30.
*/ */
......
package cn.quantgroup.xyqb.entity.enumerate;
/**
* Created by 11 on 2016/12/30.
*/
public enum EducationEnum {
UNKNOWN("暂无"),
MASTER("硕士及以上"),
UNDER_GRADUATE("本科"),
JUNIOR_COLLEGE("大专"),
TECHNICAL_SECONDARY_SCHOOL("中专"),
TECHNICAL_SCHOOL("技校"),
HIGH_SCHOOL("高中"),
MIDDLE_SCHOOL("初中"),
PRIMARY_SCHOOL("小学"),
OTHER("其他");
private String name;
EducationEnum(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return name;
}
}
package cn.quantgroup.xyqb.entity.enumerate;
/**
* Created by 11 on 2016/12/30.
*/
public enum IncomeEnum {
UNKNOWN("未知"),
CASH("现金计算"),
PAY_CARD("工资卡"),
CASH_AND_PAY_CARD("混合");
private String desc;
IncomeEnum(String desc) {
this.desc = desc;
}
}
\ No newline at end of file
package cn.quantgroup.xyqb.entity.enumerate;
/**
* Created by 11 on 2016/12/30.
*/
public enum IncomeRangeEnum {
UNKNOWN("暂无"),
BELOW_1000("小于1000元"),
BELOW_3000("1000至3000元"),
BELOW_5000("3000至5000元"),
BELOW_8000("5000至8000元"),
BELOW_10000("8000至10000元"),
BELOW_15000("10000至15000元"),
BELOW_20000("15000至20000元"),
ABOVE_20000("大于20000元");
private String desc;
IncomeRangeEnum(String desc) {
this.desc = desc;
}
}
package cn.quantgroup.xyqb.entity.enumerate;
/**
* Created by sunnan on 2016-11-24.
*/
public enum MaritalStatus {
UNKNOWN("未知"),
SINGLE("未婚"), // 1
MARRIED("已婚"), // 2
DIVORCED("离异"), // 3
WINDOWED("丧偶"), // 4
OTHER("其他");
String description;
MaritalStatus(String desc) {
description = desc;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
String sb = "MaritalStatus{" + "description='" + description + '\'' +
'}';
return sb;
}
}
package cn.quantgroup.xyqb.entity.enumerate;
/**
* Created by 11 on 2016/12/30.
*/
public enum OccupationEnum {
UNKNOWN("暂未填写"),
WORKER("工人"),
TEACHER("教师"),
WHITE_COLLAR("白领"),
STUDENT("学生"),
CAREER_BUILDER("创业者"),
SELF_EMPLOYER("个体户"),
EMPLOYEE("公司职员"),
BISUNESS_ENTITY("企业法人"),
ONLINE_STORE_OWNER("网店店主"),
UNEMPLOYED("暂无职业"),
OTHER("其他");
private String name;
OccupationEnum(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return name;
}
}
package cn.quantgroup.xyqb.entity.enumerate;
/**
* Created by Miraculous on 2017/1/3.
*/
public enum Relation {
PARENT("父母"),
CHILDREN("子女"),
BROTHER("兄弟姐妹"),
COLLEAGUE("同事"),
CLASSMATE("同学"),
FRIEND("朋友"),
SPOUSE("夫妻"),
SELF("本人"),
OTHER("其他");
String description;
Relation(String desc) {
description = desc;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
String sb = "Relation{" + "description='" + description + '\'' +
'}';
return sb;
}
}
...@@ -26,9 +26,9 @@ public class ApiResponse { ...@@ -26,9 +26,9 @@ public class ApiResponse {
public static final int OK = 4; public static final int OK = 4;
public static final int TOO_BUSY = 5; public static final int TOO_BUSY = 5;
int code; private int code;
String type; private String type;
String message; private String message;
public ApiResponse(){} public ApiResponse(){}
......
...@@ -32,7 +32,7 @@ public class ContactModel implements Serializable { ...@@ -32,7 +32,7 @@ public class ContactModel implements Serializable {
ContactModel model = new ContactModel(); ContactModel model = new ContactModel();
model.setName(entity.getName()); model.setName(entity.getName());
model.setPhoneNo(entity.getPhoneNo()); model.setPhoneNo(entity.getPhoneNo());
model.setRelationName(Optional.ofNullable(entity.getRelation()).orElse(Relation.OTHER).getDescription()); model.setRelationName(Optional.ofNullable(entity.getRelation()).orElse(Relation.OTHER).getDesc());
model.setRelation(entity.getRelation().name()); model.setRelation(entity.getRelation().name());
return model; return model;
} }
......
package cn.quantgroup.xyqb.service.captcha; package cn.quantgroup.xyqb.service.captcha;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.util.encrypt.Md5Util;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -10,8 +11,6 @@ import java.io.InputStream; ...@@ -10,8 +11,6 @@ import java.io.InputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
...@@ -162,7 +161,7 @@ public class GeetestLib { ...@@ -162,7 +161,7 @@ public class GeetestLib {
if (return_challenge.length() == Constants.MD5_LENGTH) { if (return_challenge.length() == Constants.MD5_LENGTH) {
this.responseStr = this.getSuccessPreProcessRes(this.md5Encode(return_challenge + this.privateKey)); this.responseStr = this.getSuccessPreProcessRes(Md5Util.build(return_challenge + this.privateKey));
return 1; return 1;
...@@ -278,14 +277,14 @@ public class GeetestLib { ...@@ -278,14 +277,14 @@ public class GeetestLib {
response = readContentFromPost(postUrl, param); response = readContentFromPost(postUrl, param);
gtlog("response: " + response); gtlog("response: " + response);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error("向gt-server进行二次验证", e);
} }
String return_seccode = ""; String return_seccode = "";
try { try {
JSONObject return_map = new JSONObject(response); JSONObject return_map = new JSONObject(response);
return_seccode = return_map.getString("seccode"); return_seccode = return_map.getString("seccode");
gtlog("md5: " + md5Encode(return_seccode)); gtlog("md5: " + Md5Util.build(return_seccode));
if (return_seccode.equals(md5Encode(seccode))) { if (return_seccode.equals(Md5Util.build(seccode))) {
return 1; return 1;
} else { } else {
return 0; return 0;
...@@ -328,7 +327,7 @@ public class GeetestLib { ...@@ -328,7 +327,7 @@ public class GeetestLib {
} }
protected boolean checkResultByPrivate(String challenge, String validate) { protected boolean checkResultByPrivate(String challenge, String validate) {
String encodeStr = md5Encode(privateKey + "geetest" + challenge); String encodeStr = Md5Util.build(privateKey + "geetest" + challenge);
return validate.equals(encodeStr); return validate.equals(encodeStr);
} }
...@@ -344,9 +343,10 @@ public class GeetestLib { ...@@ -344,9 +343,10 @@ public class GeetestLib {
URL getUrl = new URL(URL); URL getUrl = new URL(URL);
HttpURLConnection connection = (HttpURLConnection) getUrl HttpURLConnection connection = (HttpURLConnection) getUrl
.openConnection(); .openConnection();
// 设置连接主机超时(单位:毫秒)
connection.setConnectTimeout(2000);// 设置连接主机超时(单位:毫秒) connection.setConnectTimeout(2000);
connection.setReadTimeout(2000);// 设置从主机读取数据超时(单位:毫秒) // 设置从主机读取数据超时(单位:毫秒)
connection.setReadTimeout(2000);
// 建立与服务器的连接,并未发送数据 // 建立与服务器的连接,并未发送数据
connection.connect(); connection.connect();
...@@ -362,11 +362,11 @@ public class GeetestLib { ...@@ -362,11 +362,11 @@ public class GeetestLib {
sBuffer.append(new String(buf, 0, n, "UTF-8")); sBuffer.append(new String(buf, 0, n, "UTF-8"));
} }
inStream.close(); inStream.close();
connection.disconnect();// 断开连接 // 断开连接
connection.disconnect();
return sBuffer.toString(); return sBuffer.toString();
} else { } else {
return Constants.CHECK_FAIL; return Constants.CHECK_FAIL;
} }
} }
...@@ -385,9 +385,10 @@ public class GeetestLib { ...@@ -385,9 +385,10 @@ public class GeetestLib {
URL postUrl = new URL(URL); URL postUrl = new URL(URL);
HttpURLConnection connection = (HttpURLConnection) postUrl HttpURLConnection connection = (HttpURLConnection) postUrl
.openConnection(); .openConnection();
// 设置连接主机超时(单位:毫秒)
connection.setConnectTimeout(2000);// 设置连接主机超时(单位:毫秒) connection.setConnectTimeout(2000);
connection.setReadTimeout(2000);// 设置从主机读取数据超时(单位:毫秒) // 设置从主机读取数据超时(单位:毫秒)
connection.setReadTimeout(2000);
connection.setRequestMethod("POST"); connection.setRequestMethod("POST");
connection.setDoInput(true); connection.setDoInput(true);
connection.setDoOutput(true); connection.setDoOutput(true);
...@@ -412,7 +413,8 @@ public class GeetestLib { ...@@ -412,7 +413,8 @@ public class GeetestLib {
sBuffer.append(new String(buf, 0, n, "UTF-8")); sBuffer.append(new String(buf, 0, n, "UTF-8"));
} }
inStream.close(); inStream.close();
connection.disconnect();// 断开连接 // 断开连接
connection.disconnect();
return sBuffer.toString(); return sBuffer.toString();
} else { } else {
...@@ -421,38 +423,4 @@ public class GeetestLib { ...@@ -421,38 +423,4 @@ public class GeetestLib {
} }
} }
/**
* md5 加密
*
* @param plainText
* @return
* @time 2014年7月10日 下午3:30:01
*/
private String md5Encode(String plainText) {
String re_md5 = "";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
StringBuilder buf = new StringBuilder();
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0) {
i += 256;
}
if (i < 16) {
buf.append("0");
}
buf.append(Integer.toHexString(i));
}
re_md5 = buf.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return re_md5;
}
} }
package cn.quantgroup.xyqb.util.encrypt; package cn.quantgroup.xyqb.util.encrypt;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -9,16 +10,15 @@ import java.security.NoSuchAlgorithmException; ...@@ -9,16 +10,15 @@ import java.security.NoSuchAlgorithmException;
/** /**
* Created by tums on 2015/11/30. * Created by tums on 2015/11/30.
*/ */
@Slf4j
public final class Md5Util { public final class Md5Util {
private static final Logger LOGGER = LoggerFactory.getLogger(Md5Util.class);
public static String build(String content) { public static String build(String content) {
MessageDigest messageDigest; MessageDigest messageDigest;
try { try {
messageDigest = MessageDigest messageDigest = MessageDigest.getInstance("md5");
.getInstance("md5");
} catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) {
LOGGER.error(e.getMessage(), e); log.error("MessageDigest获取实例失败", e);
return null; return null;
} }
messageDigest.update(content.getBytes()); messageDigest.update(content.getBytes());
......
package common;
import cn.quantgroup.xyqb.service.captcha.GeetestLib;
import cn.quantgroup.xyqb.util.encrypt.Md5Util;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@Slf4j
@RunWith(JUnit4.class)
public class Md5Test {
final static String PWD = "123456";
@Test
public void test() {
log.info("pwd:{},Md5Util:{},Geetest:{}", PWD, Md5Util.build(PWD), GeetestLib.md5Encode(PWD));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment