|
@@ -1,68 +1,27 @@
|
|
|
package com.xxl.job.admin.controller.interceptor;
|
|
|
|
|
|
import com.xxl.job.admin.controller.annotation.PermessionLimit;
|
|
|
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
|
|
|
-import com.xxl.job.admin.core.util.CookieUtil;
|
|
|
+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.util.DigestUtils;
|
|
|
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;
|
|
|
-import java.math.BigInteger;
|
|
|
|
|
|
/**
|
|
|
- * 权限拦截, 简易版
|
|
|
+ * 权限拦截
|
|
|
*
|
|
|
* @author xuxueli 2015-12-12 18:09:04
|
|
|
*/
|
|
|
@Component
|
|
|
public class PermissionInterceptor extends HandlerInterceptorAdapter {
|
|
|
|
|
|
-
|
|
|
- public static final String LOGIN_IDENTITY_KEY = "XXL_JOB_LOGIN_IDENTITY";
|
|
|
- private static String LOGIN_IDENTITY_TOKEN;
|
|
|
- public static String getLoginIdentityToken() {
|
|
|
- if (LOGIN_IDENTITY_TOKEN == null) {
|
|
|
- String username = XxlJobAdminConfig.getAdminConfig().getLoginUsername();
|
|
|
- String password = XxlJobAdminConfig.getAdminConfig().getLoginPassword();
|
|
|
-
|
|
|
- // login token
|
|
|
- String tokenTmp = DigestUtils.md5DigestAsHex(String.valueOf(username + "_" + password).getBytes()); //.getBytes("UTF-8")
|
|
|
- tokenTmp = new BigInteger(1, tokenTmp.getBytes()).toString(16);
|
|
|
-
|
|
|
- LOGIN_IDENTITY_TOKEN = tokenTmp;
|
|
|
- }
|
|
|
- return LOGIN_IDENTITY_TOKEN;
|
|
|
- }
|
|
|
-
|
|
|
- public static boolean login(HttpServletResponse response, String username, String password, boolean ifRemember){
|
|
|
-
|
|
|
- // login token
|
|
|
- String tokenTmp = DigestUtils.md5DigestAsHex(String.valueOf(username + "_" + password).getBytes());
|
|
|
- tokenTmp = new BigInteger(1, tokenTmp.getBytes()).toString(16);
|
|
|
-
|
|
|
- if (!getLoginIdentityToken().equals(tokenTmp)){
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- // do login
|
|
|
- CookieUtil.set(response, LOGIN_IDENTITY_KEY, getLoginIdentityToken(), ifRemember);
|
|
|
- return true;
|
|
|
- }
|
|
|
- public static void logout(HttpServletRequest request, HttpServletResponse response){
|
|
|
- CookieUtil.remove(request, response, LOGIN_IDENTITY_KEY);
|
|
|
- }
|
|
|
- public static boolean ifLogin(HttpServletRequest request){
|
|
|
- String indentityInfo = CookieUtil.getValue(request, LOGIN_IDENTITY_KEY);
|
|
|
- if (indentityInfo==null || !getLoginIdentityToken().equals(indentityInfo.trim())) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
+ @Resource
|
|
|
+ private LoginService loginService;
|
|
|
|
|
|
@Override
|
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
@@ -70,17 +29,30 @@ public class PermissionInterceptor extends HandlerInterceptorAdapter {
|
|
|
if (!(handler instanceof HandlerMethod)) {
|
|
|
return super.preHandle(request, response, handler);
|
|
|
}
|
|
|
-
|
|
|
- if (!ifLogin(request)) {
|
|
|
- HandlerMethod method = (HandlerMethod)handler;
|
|
|
- PermessionLimit permission = method.getMethodAnnotation(PermessionLimit.class);
|
|
|
- if (permission == null || permission.limit()) {
|
|
|
+
|
|
|
+ // if need login
|
|
|
+ boolean needLogin = true;
|
|
|
+ boolean needAdminuser = false;
|
|
|
+ HandlerMethod method = (HandlerMethod)handler;
|
|
|
+ PermessionLimit permission = method.getMethodAnnotation(PermessionLimit.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);
|
|
|
}
|
|
|
|