做个笔记防止一直出现这种问题,其实就是很简单的一个问题只是在ServiceImpl中少了注释才会出现这个debug
加上后问题解决。
@Service
@Transactional
@Slf4j
public class BaseServiceBoImpl implements BaseService {
private static final String splitWord = "__";
private final static Logger logger = LoggerFactory.getLogger(BaseServiceBoImpl.class);
private String salt; // 盐
protected String encryptKeyDecode; // 加密秘钥
protected String signKeyDecode; // 签名秘钥
private static final int EXPIREDATE = 1; // token过期时间间隔-天
private static final String ENCODE = "utf-8"; // 编码
public void init() {
salt = "salt_xxx";
encryptKeyDecode = "encrypt_xxx";
signKeyDecode = "sign_xxx";
}
@Override
public ResponseDto checkTokenAndSign(String token, String sign, Map<String, String> params) {
logger.info("----checkTokenAndSign----" + params.toString());
ResponseDto result = new ResponseDto();
// 1、验证token
if (StringUtils.isEmpty(token) || StringUtils.isEmpty(sign)) {
String code = ErrorEnum.input_null.getCode();
result.setErrorcode(code);
result.setErrormsg(ErrorEnum.getMsg(code));
return result;
}
String decryptStr = DESUtil.decrypt(token, this.encryptKeyDecode);
String timestamp = decryptStr.split(splitWord)[2];
int diff_day = (int) ((System.currentTimeMillis() - Long.valueOf(timestamp)) / 1000 / 60 / 60 / 24); // 当前时间与token时间的时间差(天为单位)
if (diff_day > EXPIREDATE) {
String code = ErrorEnum.token_expired.getCode();
result.setErrorcode(code);
result.setErrormsg(ErrorEnum.getMsg(code));
return result;
}
// 2、签名(token和sign不做签名)
String newSign = SignatureUtil.sign(params, this.signKeyDecode, ENCODE);
if (!newSign.equals(sign)) {
String code = ErrorEnum.sign_failure.getCode();
result.setErrorcode(code);
result.setErrormsg(ErrorEnum.getMsg(code));
return result;
}
result.setErrorcode(ErrorEnum.ok.getCode());
return result;
}
@Override
public ResponseDto getToken(String user, String encodeSecret) {
ResponseDto result = new ResponseDto();
try {
String deSecret = DESUtil.decrypt(encodeSecret, this.encryptKeyDecode);// 解密用户的appSecret
String secret = "password";//diamondConfigBo.getConfigByBuffer(user); // 获取diamond的user秘钥
// secret验证不通过
if (!deSecret.equals(secret)) {
String code = ErrorEnum.secret_error.getCode();
result.setErrorcode(code);
result.setErrormsg(ErrorEnum.getMsg(code));
return result;
}
String timestamp = String.valueOf(System.currentTimeMillis());
String token = DESUtil.encrypt(user + splitWord + salt + splitWord + timestamp, this.encryptKeyDecode);
String code = ErrorEnum.ok.getCode();
result.setErrorcode(code);
result.setErrormsg(ErrorEnum.getMsg(code));
result.setData(token);
return result;
} catch (Exception e) {
String code = ErrorEnum.unknown_error.getCode();
result.setErrorcode(code);
result.setErrormsg(ErrorEnum.getMsg(code));
return result;
}
}
public ResponseDto checkRequest(Map<String, String> params) {
ResponseDto result = new ResponseDto();
String user = params.get("user");
// 判断必填
if (StringUtils.isEmpty(user)) {
String code = ErrorEnum.input_null.getCode();
result.setErrorcode(code);
result.setErrormsg(ErrorEnum.getMsg(code));
return result;
}
result.setErrorcode(ErrorEnum.ok.getCode());
return result;
}
@Override
public RequestDto getRequestArgs(Map<String, String> params) {
RequestDto requestDto = new RequestDto();
String user = params.get("user");
requestDto.setUser(user);
return requestDto;
}
@Override
public void service(String token, String sign, Map<String, String> params,
ServiceWrapper<ResponseDto> serviceWrapper) {
ResponseDto result = new ResponseDto();
boolean flag = true;
// 1、校验字段是否为空,如果有错误,只写日志
result = checkRequest(params);
if (!"0".equals(result.getErrorcode())) {
flag = false;
}
// 2、校验token和签名,如果有错误,只写日志
if (flag) {
result = checkTokenAndSign(token, sign, params);
if (!"0".equals(result.getErrorcode())) {
flag = false;
}
}
// 3、验空和token都没问题,执行业务逻辑操作
if (flag) {
result = serviceWrapper.doLogic();
}
// 4、写日志
writeLog(params, result);
}
/**
* 写调用log
*
* @param params
* @param result
*/
private void writeLog(Map<String, String> params, ResponseDto result) {
}
}
public interface ServiceWrapper<T> {
/**
* 业务逻辑处理
*/
ResponseDto doLogic();
}
@Data
public class ResponseDto {
/** 错误code */
private String errorcode = "0";
/** 错误描述 */
private String errormsg = "";
/** 数据内容 */
private Object data;
/** 分页信息 */
private Page page;
public static class Page {
public Page(){
}
public Page(int current, int total){
this.current = current;
this.total = total;
}
/** 当前页数 */
private Integer current;
/** 总页数 */
private Integer total;
public Integer getCurrent() {
return current;
}
public void setCurrent(Integer current) {
this.current = current;
}
public Integer getTotal() {
return total;
}
public void setTotal(Integer total) {
this.total = total;
}
}
}