package com.xxl.job.admin.controller.interceptor;
|
|
import com.xxl.job.admin.controller.annotation.PermissionLimit;
|
import com.xxl.job.admin.core.model.XxlJobUser;
|
import com.xxl.job.admin.core.util.I18nUtil;
|
import com.xxl.job.admin.service.LoginService;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.method.HandlerMethod;
|
import org.springframework.web.servlet.AsyncHandlerInterceptor;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
|
/**
|
* 权限拦截
|
*
|
* @author xuxueli 2015-12-12 18:09:04
|
*/
|
@Component
|
public class PermissionInterceptor implements AsyncHandlerInterceptor {
|
|
@Resource
|
private LoginService loginService;
|
|
@Override
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
if (!(handler instanceof HandlerMethod)) {
|
return true; // proceed with the next interceptor
|
}
|
|
// if need login
|
boolean needLogin = true;
|
boolean needAdminuser = false;
|
HandlerMethod method = (HandlerMethod) handler;
|
PermissionLimit permission = method.getMethodAnnotation(PermissionLimit.class);
|
if (permission != null) {
|
needLogin = permission.limit();
|
needAdminuser = permission.adminuser();
|
}
|
|
if (needLogin) {
|
XxlJobUser loginUser = loginService.ifLogin(request, response);
|
if (loginUser == null) {
|
response.setStatus(302);
|
response.setHeader("location", request.getContextPath() + "/toLogin");
|
return false;
|
}
|
if (needAdminuser && loginUser.getRole() != 1) {
|
throw new RuntimeException(I18nUtil.getString("system_permission_limit"));
|
}
|
request.setAttribute(LoginService.LOGIN_IDENTITY_KEY, loginUser);
|
}
|
|
return true; // proceed with the next interceptor
|
}
|
|
}
|