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 org.springframework.stereotype.Component;
|
import org.springframework.util.DigestUtils;
|
import org.springframework.web.method.HandlerMethod;
|
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
|
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;
|
}
|
|
|
|
@Override
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
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()) {
|
response.sendRedirect(request.getContextPath() + "/toLogin");
|
//request.getRequestDispatcher("/toLogin").forward(request, response);
|
return false;
|
}
|
}
|
|
return super.preHandle(request, response, handler);
|
}
|
|
}
|