Search in sources :

Example 1 with TokenBean

use of com.weicoder.common.token.TokenBean 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;
}
Also used : TokenBean(com.weicoder.common.token.TokenBean) Ip(com.weicoder.web.validator.annotation.Ip) Token(com.weicoder.web.validator.annotation.Token) Validator(com.weicoder.web.validator.annotation.Validator)

Example 2 with TokenBean

use of com.weicoder.common.token.TokenBean in project weicoder by wdcode.

the class LoginEngine method guest.

/**
 * 获得一样空登录信息
 * @param request HttpServletRequest
 * @param response HttpServletResponse
 * @param key Key
 * @return TokenBean
 */
public static TokenBean guest(HttpServletRequest request, HttpServletResponse response, String key) {
    // 如果游客ID已经分配到最大值 把游客ID重置
    if (GUEST_ID == Integer.MIN_VALUE) {
        GUEST_ID = 0;
    }
    // 获得游客凭证
    TokenBean token = TokenEngine.newToken(GUEST_ID--, RequestUtil.getIp(request), SiteParams.LOGIN_MAX_AGE);
    // 设置游客凭证
    AttributeUtil.set(request, response, key + INFO, token.getToken(), -1);
    // 返回游客凭证
    return token;
}
Also used : TokenBean(com.weicoder.common.token.TokenBean)

Aggregations

TokenBean (com.weicoder.common.token.TokenBean)2 Ip (com.weicoder.web.validator.annotation.Ip)1 Token (com.weicoder.web.validator.annotation.Token)1 Validator (com.weicoder.web.validator.annotation.Validator)1