import com.jfinal.core.Controller; //导入方法依赖的package包/类
/**
* 为了规范代码,这里做了一点类是Spring的ResponseEntity的东西,及通过方法的返回值来判断是应该返回页面还会对应JSON数据
* 具体方式看 AdminRouters,这里用到了 ThreadLocal
*
* @param ai
*/
private void adminPermission(Invocation ai) {
try {
Controller controller = ai.getController();
AdminToken adminToken = adminTokenService.getAdminToken(controller.getRequest());
if (adminToken != null) {
BaseDataInitVO init = (BaseDataInitVO) ai.getController().getRequest().getAttribute("init");
Map webSite = init.getWebSite();
if (webSite.get("admin_dashboard_naver") == null) {
webSite.put("admin_dashboard_naver", "nav-md");
}
ai.getController().getRequest().setAttribute("webs", webSite);
try {
User user = User.dao.findById(adminToken.getUserId());
if (StringUtils.isEmpty(user.getStr("header"))) {
user.set("header", "assets/images/default-portrait.gif");
}
controller.setAttr("user", user);
TemplateHelper.fullTemplateInfo(controller);
if (!ai.getActionKey().equals("/admin/logout")) {
adminTokenService.setAdminToken(adminToken.getUserId(), adminToken.getSessionId(), controller.getRequest(), controller.getResponse());
}
ai.invoke();
// 存在消息提示
if (controller.getAttr("message") != null) {
controller.render("/admin/message.jsp");
} else {
if (!tryDoRender(ai, controller)) {
controller.render(Constants.ADMIN_NOT_FOUND_PAGE + ".jsp");
}
}
} catch (Exception e) {
LOGGER.error("", e);
exceptionHandler(ai, e);
}
} else if (ai.getActionKey().equals("/admin/login") || ai.getActionKey().equals("/api/admin/login")) {
ai.invoke();
tryDoRender(ai, controller);
} else {
blockUnLoginRequestHandler(ai);
}
} finally {
AdminTokenThreadLocal.remove();
}
}