use of com.weicoder.web.validator.annotation.Validator in project weicoder by wdcode.
the class Validators method validator.
/**
* 验证方法与对象
*
* @param method 要验证方法
* @param action 要验证对象
* @param ps 参数
* @param ip 用户ip
* @return 验证码
*/
public static int validator(Method method, Object action, Map<String, String> ps, String ip) {
// 获得是否验证Token注解
Token t = method.getAnnotation(Token.class);
// 方法上没有 检查类上
if (t == null)
t = action.getClass().getAnnotation(Token.class);
// 验证token不为空
if (t != null) {
// 验证token 获得Token
TokenBean token = TokenEngine.decrypt(ps.get(t.value()));
LOG.debug("action validator token={} t={}", JsonEngine.toJson(token));
// 判断token
if (t.valid() > 0 && !token.isValid())
// 无效
return t.valid();
if (t.expire() > 0 && token.isExpire())
// 过期
return t.expire();
if (t.sign() > 0 && token.isSign())
// 是否服务器签发sign
return t.sign();
if (t.ban() > 0 && token.isBan())
// 封号
return t.ban();
if (t.ip() > 0 && IpUtil.equals(ip, token.getIp()) > ValidatorParams.TOKEN_IP)
// 客户端IP不符
return t.ip();
// 校验token与传入的用户ID是否相同
if (U.E.isNotEmpty(t.id()) && W.C.toLong(ps.get(t.id())) != token.getId())
// 不是用户
return t.valid();
// 用户id
String uid = W.C.toString(token.getId());
// 是否强制赋值参数
if (U.E.isNotEmpty(t.uid()))
ps.put(t.uid(), uid);
else {
// 没有强制的话 替换空参数
if (!ps.containsKey("uid"))
ps.put("uid", uid);
if (!ps.containsKey("id"))
ps.put("id", uid);
}
}
// 验证ip
Ip ipv = method.getAnnotation(Ip.class);
// 方法上没有 检查类上
if (ipv == null)
ipv = action.getClass().getAnnotation(Ip.class);
// ip验证不为空
if (ipv != null)
// 获得验证ip 判断是否在白名单
if (!IpUtil.contains(ipv.value(), ip)) {
LOG.debug("action validator ips not contains ip={}", ip);
return ipv.error();
}
// 验证类
Validator vali = method.getAnnotation(Validator.class);
if (vali != null)
return Validators.validator(vali, ps);
// 返回成功
return StateParams.SUCCESS;
}