脚本宝典收集整理的这篇文章主要介绍了第一部分:实战二,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
需求不明确
缺少锻炼
第一轮基础分析
设计通过AppID和密钥来认证。
第二轮分析优化
防止“重放攻击”,增加加密token验证。
第三轮分析优化
依然有“重放攻击”风险,引入时间戳作为随机变量。
第四轮分析优化
划分职责进而识别出有哪些类
AuthToken:
Url类:
CredentialStorage类:
定义类与类之间的交互关系
泛化(Generalization):
public class A { ... }
public class B extends A { ... }
实现(Realization):
public interface A {...}
public class B implements A { ... }
聚合(Aggregation):
public class A {
PRivate B b;
public A(B b) {
this.b = b;
}
}
组合(ComposITion):
public class A {
private B b;
public A() {
this.b = new B();
}
}
关联(Association):
public class A {
private B b;
public A(B b) {
this.b = b;
}
}
或者
public class A {
private B b;
public A() {
this.b = new B();
}
}
依赖(DePEndency):
public class A {
private B b;
public A(B b) {
this.b = b;
}
}
或者
public class A {
private B b;
public A() {
this.b = new B();
}
}
或者
public class A {
public void func(B b) { ... }
}
将类组装起来并提供执行入口
public interface ApiAuthencator {
void auth(String url);
void auth(ApiRequest apiRequest);
}
public class DefaultApiAuthencatorImpl implements ApiAuthencator {
private CredentialStorage credentialStorage;
public ApiAuthencator() {
this.credentialStorage = new MySQLCredentialStorage();
}
public ApiAuthencator(CredentialStorage credentialStorage) {
this.credentialStorage = credentialStorage;
}
@override
public void auth(String url) {
ApiRequest apiRequest = ApiRequest.buildFromUrl(url);
auth(apiRequest);
}
@Override
public void auth(ApiRequest apiRequest) {
String appId = apiRequest.getAppId();
String token = apiRequest.getToken();
long timestamp = apiRequest.getTimestamp();
String originalUrl = apiRequest.getOriginalUrl();
AuthToken clientAuthToken = new AuthToken(token, timestamp);
if (clientAuthToken.isExpired()) {
throw new RuntimeException("Token is expired.");
}
String password = credentialStorage.getPasswordByAppId(appId);
AuthToken serverAuthToken = AuthToken.generate(originalUrl, appId, passw
if (!serverAuthToken.match(clientAuthToken)) {
throw new RuntimeException("Token verfication failed.");
}
}
}
以上是脚本宝典为你收集整理的第一部分:实战二全部内容,希望文章能够帮你解决第一部分:实战二所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。