jfinal_club实现先登录后访问系统并记住当前url(类似shiro)


public class LoginAuthInterceptor implements Interceptor {

    public void intercept(Invocation inv) {
        Account loginAccount = inv.getController().getAttr(LoginService.loginAccountCacheName);
        String actionKey = inv.getActionKey();
        if (isNeedLoginAuth(actionKey) && loginAccount == null) {
            inv.getController().redirect("/login?returnUrl=" + actionKey);
            return;
        } else {
            //方便前端获取用户相关信息(里面存入了用户的角色和权限相关内容)
            inv.getController().setAttr("accountInfo", loginAccount);
            inv.invoke();
        }

    }

    private boolean isNeedLoginAuth(String actionKey) {
        return !actionKey.startsWith("/login");
    }
}
me.add(new LoginAuthInterceptor()); //JFinalClubConfig

参照AdminAuthInterceptor.java实现一个默认的登录拦截器,并且在LoginService.login()方法中,将当前用户相关的角色,权限信息放入loginAccount中,

loginAccount.put("role", "权限信息");

loginAccount.put("permissions", "权限信息");

CacheKit.put(loginAccountCacheName, sessionId, loginAccount);


考虑到很多项目还是需要先登录后访问的。


评论区

快乐的蹦豆子

2019-02-26 10:06

拦截器+session+自定义注解,为啥还要url必须以login开头,个人感觉不友好

maxwade

2019-02-27 08:28

@快乐的蹦豆子 不是LoginController相关的请求全部需要登录认证,我改的是jfinal_club源码,为了后期自己在这个基础上搭建项目需要的。

热门分享

扫码入社