JFinal增加简单权限认证功能

  2017-06-16  编程技术   4 分钟

JFinal

JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!

基于JFinal有shiro权限认证模块。这里使用interceptor和session实现简单的权限认证功能。

Interceptor

每个action请求,都会校验session中是否登录成功。

public class CommonInterceptor implements Interceptor {

    public static List<String> noLoginAction;

    public CommonInterceptor() {
        noLoginAction = new ArrayList<String>();
        noLoginAction.add("/login");
        noLoginAction.add("/doLogin");
        noLoginAction.add("/logout");
    }

    public void intercept(Invocation inv) {
        Controller controller = inv.getController();
        try {
            HttpSession session = controller.getSession();
            boolean flag = (boolean) (session.getAttribute("islogin") != null ? session.getAttribute("islogin"): false);
            if (flag) {
                // 登录后调整到首页,不进入login页面
                if (IndexController.LOGIN_URL.equals(inv.getActionKey())) {
                    controller.redirect(IndexController.LOGIN_SUCCESS_URL);
                } else {
                    inv.invoke();
                }
            } else if (noLoginAction.contains(inv.getActionKey())) {
                inv.invoke();
            } else {
                controller.redirect(IndexController.LOGIN_URL);
            }
        } catch (Exception e) {
            e.printStackTrace();
            controller.redirect("/");
        }
    }
}

Controller

登录时判断用户和密码是否匹配

public void login() {
    this.render("/auth/login.html");
}
public void doLogin() { 
    String username = this.getPara("username");
    String password = this.getPara("password");
    if ("admin".equals(username) && password.equals("admin")) {
        setSessionAttr("islogin", true);
    }
    this.redirect("/");
}
public void logout() {
    setSessionAttr("islogin", false);
    this.redirect(LOGIN_URL);
}

Config

在Config中增加Interceptor

/**
* 配置全局拦截器
*/
public void configInterceptor(Interceptors me) {
    me.add(new CommonInterceptor());
}

— 转载本站文章请注明作者和出处全栈记 ,请勿用于任何商业用途

— 于 2017年06月16日 ,共写了 1504 字;

— 本文共有 2 个标签:,

发表评论

电子邮件地址不会被公开。 必填项已用*标注