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);
考虑到很多项目还是需要先登录后访问的。