1700449303
1700449304
//检查是否是m1方法调用
1700449305
1700449306
for(StackTraceElement st:sts){
1700449307
1700449308
if(st.getMethodName().equals(“m1”)){
1700449309
1700449310
return true;
1700449311
1700449312
}
1700449313
1700449314
}
1700449315
1700449316
throw new RuntimeException(“除m1方法外,该方法不允许其他方法调用”);
1700449317
1700449318
}
1700449319
1700449320
}
1700449321
1700449322
只是把“return false”替换成一个运行期异常,除了m1方法外,其他方法调用都会产生异常,该方法常用作离线注册码校验,当破解者试图暴力破解时,由于主执行者不是期望的值,因此会返回一个经过包装和混淆的异常信息,大大增加了破解的难度。
1700449323
1700449324
1700449325
1700449326
1700449328
编写高质量代码:改善Java程序的151个建议 建议116:异常只为异常服务
1700449329
1700449330
异常只为异常服务,这是何解?难道异常还能为其他服务不成?确实能,异常原本是正常逻辑的一个补充,但是有时候会被当作主逻辑使用,看如下代码:
1700449331
1700449332
//判断一个枚举是否包含String枚举项
1700449333
1700449334
public static<T extends Enum<T>>boolean Contain(Class<T>c, String name){
1700449335
1700449336
boolean result=false;
1700449337
1700449338
try{
1700449339
1700449340
Enum.valueOf(c, name);
1700449341
1700449342
result=true;
1700449343
1700449344
}catch(RuntimeException e){
1700449345
1700449346
//只要是抛出异常,则认为是不包含
1700449347
1700449348
}
1700449349
1700449350
return result;
1700449351
1700449352
}
[
上一页 ]
[ :1.700449303e+09 ]
[
下一页 ]