up
This commit is contained in:
parent
59bf6ff380
commit
fcd543de1f
@ -3,7 +3,6 @@ package com.foxinmy.weixin4j.example.server.handler;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||||
import com.foxinmy.weixin4j.handler.MessageHandlerAdapter;
|
|
||||||
import com.foxinmy.weixin4j.message.TextMessage;
|
import com.foxinmy.weixin4j.message.TextMessage;
|
||||||
import com.foxinmy.weixin4j.request.WeixinRequest;
|
import com.foxinmy.weixin4j.request.WeixinRequest;
|
||||||
import com.foxinmy.weixin4j.response.TextResponse;
|
import com.foxinmy.weixin4j.response.TextResponse;
|
||||||
@ -19,8 +18,8 @@ import com.foxinmy.weixin4j.response.WeixinResponse;
|
|||||||
* @see
|
* @see
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class HelloMessageHandler extends MessageHandlerAdapter<TextMessage> {
|
public class HelloMessageHandler extends TextMessageHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canHandle0(WeixinRequest request, TextMessage message)
|
public boolean canHandle0(WeixinRequest request, TextMessage message)
|
||||||
throws WeixinException {
|
throws WeixinException {
|
||||||
@ -45,6 +44,6 @@ public class HelloMessageHandler extends MessageHandlerAdapter<TextMessage> {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int weight() {
|
public int weight() {
|
||||||
return 2;
|
return super.weight() + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -57,6 +57,7 @@ public class WeixinRequestHandler extends
|
|||||||
protected void channelRead0(ChannelHandlerContext ctx, WeixinRequest request)
|
protected void channelRead0(ChannelHandlerContext ctx, WeixinRequest request)
|
||||||
throws WeixinException {
|
throws WeixinException {
|
||||||
AesToken aesToken = request.getAesToken();
|
AesToken aesToken = request.getAesToken();
|
||||||
|
// 消息字段不完整返回400
|
||||||
if (aesToken == null
|
if (aesToken == null
|
||||||
|| (ServerToolkits.isBlank(request.getSignature()) && ServerToolkits
|
|| (ServerToolkits.isBlank(request.getSignature()) && ServerToolkits
|
||||||
.isBlank(request.getMsgSignature()))) {
|
.isBlank(request.getMsgSignature()))) {
|
||||||
@ -67,28 +68,32 @@ public class WeixinRequestHandler extends
|
|||||||
/**
|
/**
|
||||||
* 公众平台:无论Get,Post都带signature参数,当开启aes模式时带msg_signature参数
|
* 公众平台:无论Get,Post都带signature参数,当开启aes模式时带msg_signature参数
|
||||||
* 企业号:无论Get,Post都带msg_signature参数
|
* 企业号:无论Get,Post都带msg_signature参数
|
||||||
|
* 一般来说:signature验证url上的参数签名,msg_signature验证消息体签名
|
||||||
**/
|
**/
|
||||||
if (request.getMethod() == HttpMethod.GET) {
|
if (request.getMethod() == HttpMethod.GET) {
|
||||||
|
// 服务器URL验证
|
||||||
if (!ServerToolkits.isBlank(request.getSignature())
|
if (!ServerToolkits.isBlank(request.getSignature())
|
||||||
&& MessageUtil.signature(aesToken.getToken(),
|
&& MessageUtil.signature(aesToken.getToken(),
|
||||||
request.getTimeStamp(), request.getNonce()).equals(
|
request.getTimeStamp(), request.getNonce()).equals(
|
||||||
request.getSignature())) {
|
request.getSignature())) {
|
||||||
ctx.write(new SingleResponse(request.getEchoStr()));
|
ctx.writeAndFlush(new SingleResponse(request.getEchoStr()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// 消息签名验证
|
||||||
if (!ServerToolkits.isBlank(request.getMsgSignature())
|
if (!ServerToolkits.isBlank(request.getMsgSignature())
|
||||||
&& MessageUtil.signature(aesToken.getToken(),
|
&& MessageUtil.signature(aesToken.getToken(),
|
||||||
request.getTimeStamp(), request.getNonce(),
|
request.getTimeStamp(), request.getNonce(),
|
||||||
request.getEchoStr()).equals(
|
request.getEchoStr()).equals(
|
||||||
request.getMsgSignature())) {
|
request.getMsgSignature())) {
|
||||||
ctx.write(new SingleResponse(MessageUtil.aesDecrypt(null,
|
ctx.writeAndFlush(new SingleResponse(MessageUtil.aesDecrypt(
|
||||||
aesToken.getAesKey(), request.getEchoStr())));
|
null, aesToken.getAesKey(), request.getEchoStr())));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ctx.writeAndFlush(resolveResponse(FORBIDDEN, request)).addListener(
|
ctx.writeAndFlush(resolveResponse(FORBIDDEN, request)).addListener(
|
||||||
ChannelFutureListener.CLOSE);
|
ChannelFutureListener.CLOSE);
|
||||||
return;
|
return;
|
||||||
} else if (request.getMethod() == HttpMethod.POST) {
|
} else if (request.getMethod() == HttpMethod.POST) {
|
||||||
|
// 加密模式下消息签名验证
|
||||||
if (!ServerToolkits.isBlank(request.getSignature())
|
if (!ServerToolkits.isBlank(request.getSignature())
|
||||||
&& !MessageUtil.signature(aesToken.getToken(),
|
&& !MessageUtil.signature(aesToken.getToken(),
|
||||||
request.getTimeStamp(), request.getNonce()).equals(
|
request.getTimeStamp(), request.getNonce()).equals(
|
||||||
@ -97,6 +102,7 @@ public class WeixinRequestHandler extends
|
|||||||
.addListener(ChannelFutureListener.CLOSE);
|
.addListener(ChannelFutureListener.CLOSE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// 明文模式下消息签名验证
|
||||||
if (request.getEncryptType() == EncryptType.AES
|
if (request.getEncryptType() == EncryptType.AES
|
||||||
&& !MessageUtil.signature(aesToken.getToken(),
|
&& !MessageUtil.signature(aesToken.getToken(),
|
||||||
request.getTimeStamp(), request.getNonce(),
|
request.getTimeStamp(), request.getNonce(),
|
||||||
@ -107,6 +113,7 @@ public class WeixinRequestHandler extends
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// 访问其它URL
|
||||||
ctx.writeAndFlush(resolveResponse(METHOD_NOT_ALLOWED, request))
|
ctx.writeAndFlush(resolveResponse(METHOD_NOT_ALLOWED, request))
|
||||||
.addListener(ChannelFutureListener.CLOSE);
|
.addListener(ChannelFutureListener.CLOSE);
|
||||||
return;
|
return;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user