Commit 0b24889f authored by zengtianlai3's avatar zengtianlai3

2.3.9 异常处理:泛化的捕获异常

parent fd93efa6
...@@ -22,38 +22,32 @@ public class DeviceDecoder extends ByteToMessageDecoder { ...@@ -22,38 +22,32 @@ public class DeviceDecoder extends ByteToMessageDecoder {
buffer.readBytes(packet); buffer.readBytes(packet);
buffer.resetReaderIndex(); buffer.resetReaderIndex();
Util.DEBUG_HEX("SERVER -> IN", packet, packet.length); Util.DEBUG_HEX("SERVER -> IN", packet, packet.length);
try { if (buffer.readableBytes() < BASE_LENGTH) {
if (buffer.readableBytes() < BASE_LENGTH) { return;
return; }
} buffer.markReaderIndex();
buffer.markReaderIndex(); short stx = buffer.readShort();
short stx = buffer.readShort(); short len = buffer.readShortLE();
short len = buffer.readShortLE(); byte cmd = buffer.readByte();
byte cmd = buffer.readByte(); byte ack = buffer.readByte();
byte ack = buffer.readByte();
int real_len = len;
int real_len = len; int cmd_ack_len = 2;
int cmd_ack_len = 2;
if (buffer.readableBytes() < real_len - cmd_ack_len + 1) {
if (buffer.readableBytes() < real_len - cmd_ack_len + 1) { buffer.resetReaderIndex();
buffer.resetReaderIndex(); return;
return; }
}
// buffer.resetReaderIndex(); // buffer.resetReaderIndex();
byte[] content = new byte[real_len - cmd_ack_len]; byte[] content = new byte[real_len - cmd_ack_len];
buffer.readBytes(content); buffer.readBytes(content);
byte end = buffer.readByte(); byte end = buffer.readByte();
DeviceProtocol protocol = new DeviceProtocol(stx, len, cmd, ack, content, end); DeviceProtocol protocol = new DeviceProtocol(stx, len, cmd, ack, content, end);
out.add(protocol); out.add(protocol);
} catch (Exception e) {
// TODO Auto-generated catch block
log.error("DeviceDecoder error!");
}
} }
} }
\ No newline at end of file
...@@ -14,21 +14,16 @@ public class DeviceEncoder extends MessageToByteEncoder<DeviceProtocol> { ...@@ -14,21 +14,16 @@ public class DeviceEncoder extends MessageToByteEncoder<DeviceProtocol> {
@Override @Override
protected void encode(ChannelHandlerContext tcx, DeviceProtocol msg, ByteBuf out) { protected void encode(ChannelHandlerContext tcx, DeviceProtocol msg, ByteBuf out) {
try {
out.writeShort(msg.getStx()); out.writeShort(msg.getStx());
out.writeShortLE(msg.getLen()); out.writeShortLE(msg.getLen());
out.writeByte(msg.getCmd()); out.writeByte(msg.getCmd());
out.writeByte(msg.getAck()); out.writeByte(msg.getAck());
if (msg.getContent() != null) { if (msg.getContent() != null) {
out.writeBytes(msg.getContent()); out.writeBytes(msg.getContent());
}
out.writeByte(msg.getEnd());
} catch (Exception e) {
// TODO Auto-generated catch block
log.error("解码器异常");
} }
out.writeByte(msg.getEnd());
} }
} }
...@@ -17,49 +17,43 @@ public class ForwardDecoder extends ByteToMessageDecoder { ...@@ -17,49 +17,43 @@ public class ForwardDecoder extends ByteToMessageDecoder {
@Override @Override
protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) { protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) {
// 可读长度必须大于等于基本长度 // 可读长度必须大于等于基本长度
try { byte[] packet = new byte[buffer.readableBytes()];
byte[] packet = new byte[buffer.readableBytes()]; buffer.readBytes(packet);
buffer.readBytes(packet); buffer.resetReaderIndex();
buffer.resetReaderIndex(); Util.DEBUG_HEX("SERVER -> IN", packet, packet.length);
Util.DEBUG_HEX("SERVER -> IN", packet, packet.length);
if (buffer.readableBytes() < BASE_LENGTH) { if (buffer.readableBytes() < BASE_LENGTH) {
return; return;
} }
buffer.markReaderIndex(); buffer.markReaderIndex();
short stx = buffer.readShort();//55AA->21930 short stx = buffer.readShort();//55AA->21930
short len = buffer.readShortLE(); short len = buffer.readShortLE();
byte cmd = buffer.readByte(); byte cmd = buffer.readByte();
byte ack = buffer.readByte();////stx:21930,len:52,cmd:-112,ack:0 byte ack = buffer.readByte();////stx:21930,len:52,cmd:-112,ack:0
int real_len = len;//注意,透传前已经去掉了END一个字符 int real_len = len;//注意,透传前已经去掉了END一个字符
int cmd_ack_len = 2; int cmd_ack_len = 2;
if (buffer.readableBytes() < real_len - cmd_ack_len + 1) { if (buffer.readableBytes() < real_len - cmd_ack_len + 1) {
buffer.resetReaderIndex(); buffer.resetReaderIndex();
return; return;
} }
// buffer.resetReaderIndex();//复位 // buffer.resetReaderIndex();//复位
// 读取data数据 // 读取data数据
byte[] content = new byte[real_len - cmd_ack_len]; byte[] content = new byte[real_len - cmd_ack_len];
buffer.readBytes(content); buffer.readBytes(content);
byte end = buffer.readByte();
DeviceProtocol protocol = new DeviceProtocol(stx, real_len, cmd, ack, content, end); byte end = buffer.readByte();
out.add(protocol);
} catch (Exception e) { DeviceProtocol protocol = new DeviceProtocol(stx, real_len, cmd, ack, content, end);
// TODO Auto-generated catch block out.add(protocol);
log.error("Decoder error");
}
} }
......
...@@ -11,20 +11,15 @@ public class ForwardEncoder extends MessageToByteEncoder<DeviceProtocol> { ...@@ -11,20 +11,15 @@ public class ForwardEncoder extends MessageToByteEncoder<DeviceProtocol> {
@Override @Override
protected void encode(ChannelHandlerContext tcx, DeviceProtocol msg, ByteBuf out) { protected void encode(ChannelHandlerContext tcx, DeviceProtocol msg, ByteBuf out) {
try {
out.writeShort(msg.getStx()); out.writeShort(msg.getStx());
out.writeShortLE(msg.getLen()); out.writeShortLE(msg.getLen());
out.writeByte(msg.getCmd()); out.writeByte(msg.getCmd());
out.writeByte(msg.getAck()); out.writeByte(msg.getAck());
if (msg.getContent() != null) { if (msg.getContent() != null) {
out.writeBytes(msg.getContent()); out.writeBytes(msg.getContent());
}
out.writeByte(msg.getEnd());
} catch (Exception e) {
// TODO Auto-generated catch block
log.error("解码器异常");
} }
out.writeByte(msg.getEnd());
} }
} }
...@@ -22,22 +22,23 @@ public class JwtUtil { ...@@ -22,22 +22,23 @@ public class JwtUtil {
**/ **/
private static final long EXPIRATION = 3600L;//单位为秒 private static final long EXPIRATION = 3600L;//单位为秒
private static HashMap<String,String> tokens = new HashMap<>(); private static HashMap<String, String> tokens = new HashMap<>();
/** /**
* 生成用户token,设置token超时时间 * 生成用户token,设置token超时时间
*/ */
public static String createToken(LoginUser user){ public static String createToken(LoginUser user) {
//过期时间 //过期时间
Date expireDate = new Date(System.currentTimeMillis() + EXPIRATION * 1000); Date expireDate = new Date(System.currentTimeMillis() + EXPIRATION * 1000);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("alg", "HS256"); map.put("alg", "HS256");
map.put("typ", "JWT"); map.put("typ", "JWT");
String token= JWT.create() String token = JWT.create()
.withHeader(map) //添加头部 .withHeader(map) //添加头部
//可以把数据存在claim中 //可以把数据存在claim中
.withClaim("userId",user.getUserId()) .withClaim("userId", user.getUserId())
.withClaim("userName",user.getUserName()) .withClaim("userName", user.getUserName())
.withClaim("password",user.getPassword()) .withClaim("password", user.getPassword())
.withExpiresAt(expireDate) //超时设置,设置过期的日期 .withExpiresAt(expireDate) //超时设置,设置过期的日期
.withIssuedAt(new Date()) //签发时间 .withIssuedAt(new Date()) //签发时间
.sign(Algorithm.HMAC256(SECRET)); //SECRET加密 .sign(Algorithm.HMAC256(SECRET)); //SECRET加密
...@@ -63,16 +64,9 @@ public class JwtUtil { ...@@ -63,16 +64,9 @@ public class JwtUtil {
/** /**
* 检验token并解析token * 检验token并解析token
*/ */
public static DecodedJWT verifyToken(String token){ public static DecodedJWT verifyToken(String token) {
DecodedJWT jwt=null; JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
try { DecodedJWT jwt = verifier.verify(token);
JWTVerifier verifier=JWT.require(Algorithm.HMAC256(SECRET)).build();
jwt=verifier.verify(token);
}catch (Exception e){
log.error(e.getMessage());
log.error("解析编码异常");
}
return jwt; return jwt;
} }
} }
...@@ -57,32 +57,28 @@ public class LogAspect { ...@@ -57,32 +57,28 @@ public class LogAspect {
} }
protected void handleLog(final JoinPoint joinPoint, final Exception e, Object jsonResult) { protected void handleLog(final JoinPoint joinPoint, final Exception e, Object jsonResult) {
try {
// 获得注解
MyLog controllerLog = getAnnotationLog(joinPoint);
if (controllerLog == null) {
return;
}
SysOperLog operLog = new SysOperLog(); // 获得注解
operLog.setStatus(0); MyLog controllerLog = getAnnotationLog(joinPoint);
operLog.setOperTime(new Date()); if (controllerLog == null) {
if (e != null) { return;
operLog.setStatus(1); }
operLog.setErrorMsg(StringUtils.substring(((IotLicenseException) e).getMsg(), 0, 2000));
}
String uri = UserUtils.getUri(); SysOperLog operLog = new SysOperLog();
operLog.setUri(uri); operLog.setStatus(0);
// operLog.setMethod(className + "." + methodName + "()"); operLog.setOperTime(new Date());
// 处理设置注解上的参数 if (e != null) {
getControllerMethodDescription(joinPoint, controllerLog, operLog); operLog.setStatus(1);
// 保存数据库 operLog.setErrorMsg(StringUtils.substring(((IotLicenseException) e).getMsg(), 0, 2000));
sysOperLogService.addOperlog(operLog.getTitle(), operLog.getBusinessType(), operLog.getUri(), operLog.getStatus(), operLog.getOptParam(), operLog.getErrorMsg(), operLog.getOperTime());
} catch (Exception exp) {
log.error("==前置通知异常==");
log.error("日志异常信息 {}", exp);
} }
String uri = UserUtils.getUri();
operLog.setUri(uri);
// operLog.setMethod(className + "." + methodName + "()");
// 处理设置注解上的参数
getControllerMethodDescription(joinPoint, controllerLog, operLog);
// 保存数据库
sysOperLogService.addOperlog(operLog.getTitle(), operLog.getBusinessType(), operLog.getUri(), operLog.getStatus(), operLog.getOptParam(), operLog.getErrorMsg(), operLog.getOperTime());
} }
/** /**
......
...@@ -16,44 +16,37 @@ public class OperateDecoder extends ByteToMessageDecoder { ...@@ -16,44 +16,37 @@ public class OperateDecoder extends ByteToMessageDecoder {
@Override @Override
protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) { protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) {
// 可读长度必须大于等于基本长度 // 可读长度必须大于等于基本长度
try { if (buffer.readableBytes() < BASE_LENGTH) {
return;
if (buffer.readableBytes() < BASE_LENGTH) { }
return; buffer.markReaderIndex();
}
buffer.markReaderIndex();
short stx = buffer.readShort();
short len = buffer.readShortLE();
byte cmd = buffer.readByte(); short stx = buffer.readShort();
byte ack = buffer.readByte(); short len = buffer.readShortLE();
byte cmd = buffer.readByte();
byte ack = buffer.readByte();
int real_len = len;
int cmd_ack_len = 2;
if (buffer.readableBytes() < real_len - cmd_ack_len + 1) { int real_len = len;
buffer.resetReaderIndex(); int cmd_ack_len = 2;
return;
}
if (buffer.readableBytes() < real_len - cmd_ack_len + 1) {
buffer.resetReaderIndex();
return;
}
// 读取data数据
byte[] content = new byte[real_len - cmd_ack_len];
buffer.readBytes(content);
// 读取data数据
byte[] content = new byte[real_len - cmd_ack_len];
buffer.readBytes(content);
byte end = buffer.readByte();
DeviceProtocol protocol = new DeviceProtocol(stx, real_len, cmd, ack, content, end); byte end = buffer.readByte();
out.add(protocol);
} catch (Exception e) { DeviceProtocol protocol = new DeviceProtocol(stx, real_len, cmd, ack, content, end);
// TODO Auto-generated catch block out.add(protocol);
log.error("Decoder error");
}
} }
......
...@@ -4,7 +4,6 @@ import io.netty.buffer.ByteBuf; ...@@ -4,7 +4,6 @@ import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder; import io.netty.handler.codec.MessageToByteEncoder;
import iot.sixiang.license.device.DeviceProtocol; import iot.sixiang.license.device.DeviceProtocol;
import iot.sixiang.license.util.Util;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
...@@ -12,20 +11,15 @@ public class OperateEncoder extends MessageToByteEncoder<DeviceProtocol> { ...@@ -12,20 +11,15 @@ public class OperateEncoder extends MessageToByteEncoder<DeviceProtocol> {
@Override @Override
protected void encode(ChannelHandlerContext tcx, DeviceProtocol msg, ByteBuf out) { protected void encode(ChannelHandlerContext tcx, DeviceProtocol msg, ByteBuf out) {
try {
out.writeShort(msg.getStx()); out.writeShort(msg.getStx());
out.writeShortLE(msg.getLen()); out.writeShortLE(msg.getLen());
out.writeByte(msg.getCmd()); out.writeByte(msg.getCmd());
out.writeByte(msg.getAck()); out.writeByte(msg.getAck());
if (msg.getContent() != null) { if (msg.getContent() != null) {
out.writeBytes(msg.getContent()); out.writeBytes(msg.getContent());
}
out.writeByte(msg.getEnd());
} catch (Exception e) {
// TODO Auto-generated catch block
log.error("解码器异常");
} }
out.writeByte(msg.getEnd());
} }
} }
...@@ -2,15 +2,14 @@ package iot.sixiang.license.util; ...@@ -2,15 +2,14 @@ package iot.sixiang.license.util;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.io.*; import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.Date;
import java.util.regex.Matcher; import java.util.Locale;
import java.util.regex.Pattern;
@Slf4j @Slf4j
public class CommonUtil { public class CommonUtil {
/** /**
* 随机生成指定长度的字符串 * 随机生成指定长度的字符串
......
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