发表于: 2017-08-27 21:12:45
2 1002
一.今天完成的事情
1.最后完善了下项目,添加了token令牌自动认证,思路是通过加密后的用户名,登陆时间生成token令牌,将令牌放入cookie中,服务器拦截到请求之后从cookie中获取token令牌,对令牌进行验证,验证成功直接放行,否则提示登陆.
以下是生成token的代码,使用JsonWebToken生成,其中withClaim是自定义的属性,用于token令牌的验证.
withExpireAt则定义了失效时间.
以下是token的验证过程.
最后获取到的username,userLoginAt,encry就是生成token时放入的值.根据自定义的规则,验证通过之后返回true.
这两部分代码没有贴全,后面会上传至svn和gitHub的.
这里还有一个需要注意的地方,如果token到期,那么在验证token时是会报异常的,该异常为:TokenExpiredException,我们需要自己在代码中利用try..catch处理异常,处理方式也很简单,打上一条日志,返回false即可.如图
2.测试短信验证码接口
使用的是阿里云的短信验证接口
使用步骤是下载sdk,将包导入到项目中,我是将包方在maven仓库,然后自定义了groupID和artifitID,然后在pom文件中添加依赖如下
接着是根据文档自己编写demo,基本上按照阿里云网站上的demo编写即可
public class AliSMS {
public void sendSMS() {
// System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
// System.setProperty("sun.net.clinet.defaultReadTimeout", "10000");
final String product = "Dysmsapi";
final String domain = "dysmsapi.aliyuncs.com";
//请求的ID和密钥
final String accessKeyId = "请求ID";
final String accessKeySecret = "请求密钥";
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
try {
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
} catch (ClientException e1) {
Log.loggerCreate(LogLevel.WARN, "客户端异常..........DefaultProfile" + e1.getMessage());
e1.printStackTrace();
}
IAcsClient acsClient = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
request.setMethod(MethodType.POST);
request.setPhoneNumbers("电话号码");
StringBuilder code = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 6; i++) {
code.append(String.valueOf(random.nextInt(10)));
}
String prefixStr = "{\"number\":\"";
String suffixStr = "\"}";
String number = prefixStr + code.toString() + suffixStr;
request.setTemplateParam(number);
Log.loggerCreate(LogLevel.WARN, "短信验证码为: "+code.toString());
request.setSignName("张鑫");
request.setTemplateCode("短信模版码");
SendSmsResponse sendSmsResponse;
try {
sendSmsResponse = acsClient.getAcsResponse(request);
Log.loggerCreate(LogLevel.WARN,
"返回值为: " + sendSmsResponse.getCode() + "描述: " + sendSmsResponse.getMessage());
Log.loggerCreate(LogLevel.WARN,
"请求ID为: " + sendSmsResponse.getRequestId() + "回执ID为: " + sendSmsResponse.getBizId());
} catch (ServerException e) {
Log.loggerCreate(LogLevel.ERROR, "服务端异常............" + e.getMessage());
e.printStackTrace();
} catch (ClientException e) {
Log.loggerCreate(LogLevel.ERROR, "客户端异常.........." + e.getMessage());
e.printStackTrace();
}
}
}
刚开始写完的时候,测试没有结果,因为是直接照着阿里云的网上的demo写的,这个demo中没有记录日志,所以不知道哪里配置有问题,然后一步一步的打日志调试,并且根据返回的状态码查看接口文档,根据接口文档定位问题,解决问题,最后调试成功.
二.明天的计划
1.准备小课堂
2.将短信验证码的功能集成到系统中
三.遇到的问题
暂无
四.收获
在使用第三方API时一定要多打日志,并且根据返回的消息和状态码来对照接口文档调试,一家能够将产品商用的接口还是比较成熟的,基本上遇到的问题在接口文档中都有所提及,所以一定要多利用接口文档.
五.任务进度情况
暂时没有延期风险
评论