content: 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.handler.HandlerInterceptorAdapter;
  
  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 extends HandlerInterceptorAdapter {
  
  	@Resource
  	private LoginService loginService;
  
  	@Override
  	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  		
  		if (!(handler instanceof HandlerMethod)) {
  			return super.preHandle(request, response, handler);
  		}
  
  		// 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.sendRedirect(request.getContextPath() + "/toLogin");
  				//request.getRequestDispatcher("/toLogin").forward(request, response);
  				return false;
  			}
  			if (needAdminuser && loginUser.getRole()!=1) {
  				throw new RuntimeException(I18nUtil.getString("system_permission_limit"));
  			}
  			request.setAttribute(LoginService.LOGIN_IDENTITY_KEY, loginUser);
  		}
  
  		return super.preHandle(request, response, handler);
  	}
  	
  }
  