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