发表于: 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时一定要多打日志,并且根据返回的消息和状态码来对照接口文档调试,一家能够将产品商用的接口还是比较成熟的,基本上遇到的问题在接口文档中都有所提及,所以一定要多利用接口文档.

五.任务进度情况

暂时没有延期风险

禅道链接http://task.ptteng.com/zentao/project-task-259.html


返回列表 返回列表
评论

    分享到