Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mica
mica-weixin
提交
841c031e
M
mica-weixin
项目概览
mica
/
mica-weixin
通知
8
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
mica-weixin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
841c031e
编写于
3月 17, 2019
作者:
如梦技术
🐛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
解决小程序,启用并设置消息推送配置校验不通过的问题。
上级
25b0fd77
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
52 addition
and
24 deletion
+52
-24
README.md
README.md
+4
-1
spring-boot-starter-weixin/gradle.properties
spring-boot-starter-weixin/gradle.properties
+1
-1
spring-boot-starter-weixin/src/main/java/net/dreamlu/weixin/spring/MsgController.java
...rc/main/java/net/dreamlu/weixin/spring/MsgController.java
+5
-0
spring-boot-starter-weixin/src/main/java/net/dreamlu/weixin/spring/MsgInterceptor.java
...c/main/java/net/dreamlu/weixin/spring/MsgInterceptor.java
+36
-21
spring-boot-starter-weixin/src/main/java/net/dreamlu/weixin/spring/WebUtils.java
...xin/src/main/java/net/dreamlu/weixin/spring/WebUtils.java
+5
-0
spring-boot-weixin-demo/pom.xml
spring-boot-weixin-demo/pom.xml
+1
-1
未找到文件。
README.md
浏览文件 @
841c031e
...
@@ -17,7 +17,7 @@ jfinal weixin 的 spring boot starter,这个starter是为了方便boot用户
...
@@ -17,7 +17,7 @@ jfinal weixin 的 spring boot starter,这个starter是为了方便boot用户
<dependency>
<dependency>
<groupId>
net.dreamlu
</groupId>
<groupId>
net.dreamlu
</groupId>
<artifactId>
spring-boot-starter-weixin
</artifactId>
<artifactId>
spring-boot-starter-weixin
</artifactId>
<version>
1.3.
3
</version>
<version>
1.3.
4
</version>
</dependency>
</dependency>
```
```
...
@@ -67,6 +67,9 @@ dream:
...
@@ -67,6 +67,9 @@ dream:
-
`access-token-cache`
建议配置有效时间7100秒。
-
`access-token-cache`
建议配置有效时间7100秒。
## 更新说明
## 更新说明
>## 2019-03-17 v1.3.4
> 解决小程序,启用并设置消息推送配置校验不通过的问题。
>## 2019-03-07 v1.3.3
>## 2019-03-07 v1.3.3
> 升级到 `gradle 5.2.1`。
> 升级到 `gradle 5.2.1`。
...
...
spring-boot-starter-weixin/gradle.properties
浏览文件 @
841c031e
VERSION
=
1.3.
3
VERSION
=
1.3.
4
GROUPID
=
net.dreamlu
GROUPID
=
net.dreamlu
userName
=
chunmeng
userName
=
chunmeng
...
...
spring-boot-starter-weixin/src/main/java/net/dreamlu/weixin/spring/MsgController.java
浏览文件 @
841c031e
...
@@ -23,6 +23,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
...
@@ -23,6 +23,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
/**
* 消息控制器
*
* @author L.cm
*/
public
abstract
class
MsgController
{
public
abstract
class
MsgController
{
private
static
final
Log
logger
=
LogFactory
.
getLog
(
WebUtils
.
class
);
private
static
final
Log
logger
=
LogFactory
.
getLog
(
WebUtils
.
class
);
private
static
final
String
IN_MSG_WX_CACHE_KEY
=
"_IN_MSG_WX_CACHE_KEY_"
;
private
static
final
String
IN_MSG_WX_CACHE_KEY
=
"_IN_MSG_WX_CACHE_KEY_"
;
...
...
spring-boot-starter-weixin/src/main/java/net/dreamlu/weixin/spring/MsgInterceptor.java
浏览文件 @
841c031e
package
net.dreamlu.weixin.spring
;
package
net.dreamlu.weixin.spring
;
import
com.jfinal.kit.HashKit
;
import
com.jfinal.kit.StrKit
;
import
com.jfinal.kit.StrKit
;
import
com.jfinal.weixin.sdk.api.ApiConfigKit
;
import
com.jfinal.weixin.sdk.api.ApiConfigKit
;
import
com.jfinal.weixin.sdk.kit.SignatureCheckKit
;
import
com.jfinal.wxaapp.WxaConfigKit
;
import
lombok.RequiredArgsConstructor
;
import
net.dreamlu.weixin.annotation.WxApi
;
import
net.dreamlu.weixin.annotation.WxApi
;
import
net.dreamlu.weixin.properties.DreamWeixinProperties
;
import
net.dreamlu.weixin.properties.DreamWeixinProperties
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.Log
;
...
@@ -13,16 +15,19 @@ import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
...
@@ -13,16 +15,19 @@ import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.Arrays
;
/**
* 消息拦截器
*
* @author L.cm
*/
@RequiredArgsConstructor
public
class
MsgInterceptor
extends
HandlerInterceptorAdapter
{
public
class
MsgInterceptor
extends
HandlerInterceptorAdapter
{
private
static
final
Log
logger
=
LogFactory
.
getLog
(
MsgInterceptor
.
class
);
private
static
final
Log
logger
=
LogFactory
.
getLog
(
MsgInterceptor
.
class
);
private
final
DreamWeixinProperties
weixinProperties
;
private
final
DreamWeixinProperties
weixinProperties
;
public
MsgInterceptor
(
DreamWeixinProperties
weixinProperties
)
{
this
.
weixinProperties
=
weixinProperties
;
}
@Override
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
throws
Exception
{
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
throws
Exception
{
// 非控制器请求直接跳出
// 非控制器请求直接跳出
...
@@ -39,29 +44,31 @@ public class MsgInterceptor extends HandlerInterceptorAdapter {
...
@@ -39,29 +44,31 @@ public class MsgInterceptor extends HandlerInterceptorAdapter {
ApiConfigKit
.
setThreadLocalAppId
(
appId
);
ApiConfigKit
.
setThreadLocalAppId
(
appId
);
return
true
;
return
true
;
}
}
// 判断是否多公众号,将 appId 与当前线程绑定,以便在后续操作中方便获取ApiConfig对象:
Object
bean
=
handlerMethod
.
getBean
();
Object
bean
=
handlerMethod
.
getBean
();
// 小程序直接跳出
boolean
isWx
=
bean
instanceof
MsgController
;
if
(
bean
instanceof
DreamWxaMsgController
)
{
String
token
;
return
true
;
if
(
isWx
)
{
token
=
ApiConfigKit
.
getApiConfig
().
getToken
();
}
else
{
token
=
WxaConfigKit
.
getWxaConfig
().
getToken
();
}
}
/**
* 将 appId 与当前线程绑定,以便在后续操作中方便获取ApiConfig对象:
* <pre>
* ApiConfigKit.getApiConfig();
* </pre>
*/
ApiConfigKit
.
setThreadLocalAppId
(
appId
);
// 如果是服务器配置请求,则配置服务器并返回
// 如果是服务器配置请求,则配置服务器并返回
if
(
isConfigServerRequest
(
request
))
{
if
(
isConfigServerRequest
(
request
))
{
configServer
(
request
,
response
);
configServer
(
request
,
response
,
token
);
return
false
;
return
false
;
}
}
// 判断是否多公众号,将 appId 与当前线程绑定,以便在后续操作中方便获取ApiConfig对象:
if
(
isWx
)
{
ApiConfigKit
.
setThreadLocalAppId
(
appId
);
}
// 对开发测试更加友好
// 对开发测试更加友好
if
(
ApiConfigKit
.
isDevMode
())
{
if
(
ApiConfigKit
.
isDevMode
())
{
return
true
;
return
true
;
}
else
{
}
else
{
// 签名检测
// 签名检测
if
(
checkSignature
(
request
,
response
))
{
if
(
checkSignature
(
request
,
token
))
{
return
true
;
return
true
;
}
else
{
}
else
{
WebUtils
.
renderText
(
response
,
"签名验证失败,请确定是微信服务器在发送消息过来"
);
WebUtils
.
renderText
(
response
,
"签名验证失败,请确定是微信服务器在发送消息过来"
);
...
@@ -74,7 +81,7 @@ public class MsgInterceptor extends HandlerInterceptorAdapter {
...
@@ -74,7 +81,7 @@ public class MsgInterceptor extends HandlerInterceptorAdapter {
/**
/**
* 检测签名
* 检测签名
*/
*/
private
boolean
checkSignature
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
private
boolean
checkSignature
(
HttpServletRequest
request
,
String
token
)
{
String
signature
=
request
.
getParameter
(
"signature"
);
String
signature
=
request
.
getParameter
(
"signature"
);
String
timestamp
=
request
.
getParameter
(
"timestamp"
);
String
timestamp
=
request
.
getParameter
(
"timestamp"
);
String
nonce
=
request
.
getParameter
(
"nonce"
);
String
nonce
=
request
.
getParameter
(
"nonce"
);
...
@@ -82,7 +89,7 @@ public class MsgInterceptor extends HandlerInterceptorAdapter {
...
@@ -82,7 +89,7 @@ public class MsgInterceptor extends HandlerInterceptorAdapter {
logger
.
error
(
"check signature failure"
);
logger
.
error
(
"check signature failure"
);
return
false
;
return
false
;
}
}
if
(
SignatureCheckKit
.
me
.
checkSignature
(
signature
,
timestamp
,
nonce
))
{
if
(
checkSignature
(
token
,
signature
,
timestamp
,
nonce
))
{
return
true
;
return
true
;
}
else
{
}
else
{
logger
.
error
(
"check signature failure: "
+
logger
.
error
(
"check signature failure: "
+
...
@@ -106,13 +113,13 @@ public class MsgInterceptor extends HandlerInterceptorAdapter {
...
@@ -106,13 +113,13 @@ public class MsgInterceptor extends HandlerInterceptorAdapter {
* @param request HttpServletRequest
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param response HttpServletResponse
*/
*/
private
void
configServer
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
private
void
configServer
(
HttpServletRequest
request
,
HttpServletResponse
response
,
String
token
)
{
// 通过 echostr 判断请求是否为配置微信服务器回调所需的 url 与 token
// 通过 echostr 判断请求是否为配置微信服务器回调所需的 url 与 token
String
echostr
=
request
.
getParameter
(
"echostr"
);
String
echostr
=
request
.
getParameter
(
"echostr"
);
String
signature
=
request
.
getParameter
(
"signature"
);
String
signature
=
request
.
getParameter
(
"signature"
);
String
timestamp
=
request
.
getParameter
(
"timestamp"
);
String
timestamp
=
request
.
getParameter
(
"timestamp"
);
String
nonce
=
request
.
getParameter
(
"nonce"
);
String
nonce
=
request
.
getParameter
(
"nonce"
);
boolean
isOk
=
SignatureCheckKit
.
me
.
checkSignature
(
signature
,
timestamp
,
nonce
);
boolean
isOk
=
checkSignature
(
token
,
signature
,
timestamp
,
nonce
);
if
(
isOk
&&
!
response
.
isCommitted
())
{
if
(
isOk
&&
!
response
.
isCommitted
())
{
WebUtils
.
renderText
(
response
,
echostr
);
WebUtils
.
renderText
(
response
,
echostr
);
}
else
{
}
else
{
...
@@ -120,6 +127,14 @@ public class MsgInterceptor extends HandlerInterceptorAdapter {
...
@@ -120,6 +127,14 @@ public class MsgInterceptor extends HandlerInterceptorAdapter {
}
}
}
}
private
boolean
checkSignature
(
String
token
,
String
signature
,
String
timestamp
,
String
nonce
)
{
String
[]
array
=
new
String
[]{
token
,
timestamp
,
nonce
};
Arrays
.
sort
(
array
);
String
tempStr
=
array
[
0
]
+
array
[
1
]
+
array
[
2
];
tempStr
=
HashKit
.
sha1
(
tempStr
);
return
tempStr
.
equalsIgnoreCase
(
signature
);
}
@Override
@Override
public
void
afterCompletion
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
,
Exception
ex
)
throws
Exception
{
public
void
afterCompletion
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
,
Exception
ex
)
throws
Exception
{
super
.
afterCompletion
(
request
,
response
,
handler
,
ex
);
super
.
afterCompletion
(
request
,
response
,
handler
,
ex
);
...
...
spring-boot-starter-weixin/src/main/java/net/dreamlu/weixin/spring/WebUtils.java
浏览文件 @
841c031e
...
@@ -7,6 +7,11 @@ import javax.servlet.http.HttpServletResponse;
...
@@ -7,6 +7,11 @@ import javax.servlet.http.HttpServletResponse;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.io.PrintWriter
;
/**
* web工具类
*
* @author L.cm
*/
class
WebUtils
{
class
WebUtils
{
private
static
final
Log
logger
=
LogFactory
.
getLog
(
WebUtils
.
class
);
private
static
final
Log
logger
=
LogFactory
.
getLog
(
WebUtils
.
class
);
...
...
spring-boot-weixin-demo/pom.xml
浏览文件 @
841c031e
...
@@ -33,7 +33,7 @@
...
@@ -33,7 +33,7 @@
<dependency>
<dependency>
<groupId>
net.dreamlu
</groupId>
<groupId>
net.dreamlu
</groupId>
<artifactId>
spring-boot-starter-weixin
</artifactId>
<artifactId>
spring-boot-starter-weixin
</artifactId>
<version>
1.3.
3
</version>
<version>
1.3.
4
</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录