修缮token实现机制

This commit is contained in:
jinyu
2015-06-12 14:38:32 +08:00
parent 76ae9d58e3
commit dea8ab6252
15 changed files with 242 additions and 134 deletions
+5 -5
View File
@@ -39,7 +39,7 @@ weixin4j.properties说明
| 属性名 | 说明 |
| :---------- | :-------------- |
| account | 微信企业号信息 `json格式` |
| token_path | 使用FileTokenHolder时token保存的物理路径 |
| token_path | 使用FileTokenStorager时token保存的物理路径 |
| media_path | 调用媒体接口时保存媒体文件的物理路径 |
| redirect_uri | 调用OauthApi接口时需要填写的重定向路径 |
@@ -53,7 +53,7 @@ weixin4j.properties说明
token_path=/tmp/weixin4j/token
media_path=/tmp/weixin4j/media
#微信登陆授权的重定向路径(使用OauthApi时需要填写)
#企业号登陆授权的重定向路径(使用OauthApi时需要填写)
redirect_uri=http://xxx
2.实例化一个`WeixinProxy`对象,调用API
@@ -63,11 +63,11 @@ weixin4j.properties说明
// weixinProxy = new WeixinProxy(weixinAccount);
weixinProxy.getUser(userid);
> 针对`token`存储有两种方案,`File存储`/`Redis存储`,当然也可自己实现`TokenHolder`,默认使用文件(xml)的方式保存token,如果环境中支持`redis`,建议使用[RedisTokenHolder](https://github.com/foxinmy/weixin4j/wiki/%E7%94%A8redis%E4%BF%9D%E5%AD%98token).
> 针对`token`存储有两种方案,`File存储`/`Redis存储`,当然也可自己实现`TokenStorager`,默认使用文件(xml)的方式保存token,如果环境中支持`redis`,建议使用[RedisTokenStorager](https://github.com/foxinmy/weixin4j/wiki/%E7%94%A8redis%E4%BF%9D%E5%AD%98token).
> WeixinProxy weixinProxy = new WeixinProxy(new RedisTokenHolder());
> WeixinProxy weixinProxy = new WeixinProxy(new RedisTokenStorager());
> // weixinProxy = new WeixinProxy(new RedisTokenHolder(weixinAccount));
> // weixinProxy = new WeixinProxy(new RedisTokenStorager(weixinAccount));
[更新LOG](./CHANGE.md)
----------------------
@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.weixin.JsonResult;
import com.foxinmy.weixin4j.model.Button;
import com.foxinmy.weixin4j.model.WeixinAccount;
import com.foxinmy.weixin4j.qy.api.AgentApi;
import com.foxinmy.weixin4j.qy.api.BatchApi;
import com.foxinmy.weixin4j.qy.api.HelperApi;
@@ -30,9 +31,11 @@ import com.foxinmy.weixin4j.qy.model.User;
import com.foxinmy.weixin4j.qy.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.qy.type.InviteType;
import com.foxinmy.weixin4j.qy.type.UserStatus;
import com.foxinmy.weixin4j.token.FileTokenHolder;
import com.foxinmy.weixin4j.token.FileTokenStorager;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.token.TokenStorager;
import com.foxinmy.weixin4j.type.MediaType;
import com.foxinmy.weixin4j.util.ConfigUtil;
/**
* 微信企业号接口实现
@@ -55,10 +58,19 @@ public class WeixinProxy {
private final BatchApi batchApi;
/**
* 默认用文件存放Token信息
* 默认使用文件方式保存token、使用weixin4j.properties配置的账号信息
*/
public WeixinProxy() {
this(new FileTokenHolder(new WeixinTokenCreator()));
this(new FileTokenStorager());
}
/**
* 默认使用weixin4j.properties配置的账号信息
*
* @param tokenStorager
*/
public WeixinProxy(TokenStorager tokenStorager) {
this(tokenStorager, ConfigUtil.getWeixinAccount());
}
/**
@@ -68,16 +80,19 @@ public class WeixinProxy {
* @param corpsecret
*/
public WeixinProxy(String corpid, String corpsecret) {
this(new FileTokenHolder(new WeixinTokenCreator(corpid, corpsecret)));
this(new FileTokenStorager(), new WeixinAccount(corpid, corpsecret));
}
/**
* TokenHolder对象
*
* @see com.foxinmy.weixin4j.token.TokenHolder
* @param tokenHolder
* @param tokenStorager
* token存储策略
* @param weixinAccount
* 企业号账号信息
*/
public WeixinProxy(TokenHolder tokenHolder) {
public WeixinProxy(TokenStorager tokenStorager, WeixinAccount weixinAccount) {
TokenHolder tokenHolder = new TokenHolder(new WeixinTokenCreator(
weixinAccount), tokenStorager);
this.partyApi = new PartyApi(tokenHolder);
this.userApi = new UserApi(tokenHolder);
this.tagApi = new TagApi(tokenHolder);
@@ -6,7 +6,7 @@ import org.junit.Test;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.qy.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.token.FileTokenHolder;
import com.foxinmy.weixin4j.token.FileTokenStorager;
import com.foxinmy.weixin4j.token.TokenHolder;
/**
@@ -23,8 +23,8 @@ public class TokenTest {
@Before
public void setUp() {
tokenHolder = new FileTokenHolder(
new WeixinTokenCreator());
tokenHolder = new TokenHolder(new WeixinTokenCreator(),
new FileTokenStorager());
}
@Test