反馈个JFinal验证拦截的小问题

是这样的我把GET和POST写在一个方法上,如下代码配置表单验证:

/**
 * 密码验证
 */
@Before(UserValidate.class)
public void validPass() {
    String method = getRequest().getMethod();
    if ("GET".equals(method)) {
        Integer id = getParaToInt();
        setAttr("id", id);
        render("validPass.html");
    } else if ("POST".equals(method)) {
        String pass = getPara("pass");
        if (!sl.isEmpty(pass)) {
            pass = HashKit.md5(pass).toUpperCase();
        }

        String openId = getCookie(Const.Co.USER);
        Record user = CacheKit.get("session", openId);
        if (!user.get("pwd").equals(pass)) {
            setAttr("id", getParaToInt());
            setAttr("pass", pass);
            render("validPass.html");
            return;
        }

        redirect("/admin/user/pay/" + getParaToInt());
    }
}

第一次进去也就是GET方法时验证拦截器已经被触发了,那提交数据时又被触发了一次,我有个想法就是执行GET时不触发验证拦截器,在POST请求时再触发这个UserValidate验证拦截器这种方式咋实现着呢?当然把GET和POST分开弄成两个方法是可以实现,但现在一个方法同时有GET和POST请求,这个@Before就没那么细化了,建议波总考虑细化下,或是有那些秘密我还未发现的请波总指点。^_^!!

评论区

xbb0220

2016-12-18 20:13

你在你的UserValidate判断请求方法不就行了

JFinal

2016-12-18 20:19

没看明白这个 action 是干啥的,里面代码貌似是 validator 要干的事情, 为何不直接写在 Validator 中?

lyh061619

2016-12-18 20:56

@JFinal 我这个方法是操作密码验证的,一些特殊操作需求输入二级密码才能用,这个是可以丢到validator也是可以的。我帖这码主要是想说明一个方法即有GET请求又有POST请求时,在GET请求不要触发validator,只有在执行POST请求时触发validator。

JFinal

2016-12-18 22:14

@lyh061619 这种功能不需要这么麻烦,直接在 Validator 中通过 controller.getMethod().equals("POST") 做判断,不处理 GET 方法,直接 return 即可

lyh061619

2016-12-18 22:21

@JFinal 谢谢波总。

xbb0220

2016-12-20 11:16

如果你实在想jfinal给你处理是否为post或get请求的话,现在jfinal内置有POST和GET拦截器。

lyh061619

2016-12-20 11:26

@xbb0220 看到了,谢谢分享。

IvyHelen

2016-12-22 21:41

因为默认的Get Post是web样式的,如果你们和我们一样接口类型的程序的话, 完全可以自己模仿写一个Get/Post
public class GET implements Interceptor {
public void intercept(Invocation inv) {
Controller controller = inv.getController();
if ("GET".equalsIgnoreCase(controller.getRequest().getMethod()))
inv.invoke();
else{
controller.getRequest().setAttribute("code", "405");
controller.getRequest().setAttribute("message", "不支持的请求方式");
}

}
}
public class POST implements Interceptor {
public void intercept(Invocation inv) {
Controller controller = inv.getController();
if ("POST".equalsIgnoreCase(controller.getRequest().getMethod()))
inv.invoke();
else{
controller.getRequest().setAttribute("code", "405");
controller.getRequest().setAttribute("message", "不支持的请求方式");
}

}
}

lyh061619

2016-12-22 21:57

@IvyHelen 谢谢问题已处理,波总套那方法简单实用两句代码的事

热门反馈

扫码入社