package com.persagy.fm.common.handler; import com.alibaba.fastjson.JSONObject; import com.persagy.fm.common.constant.AppContextConstants; import com.persagy.fm.common.context.AppContext; import com.persagy.fm.common.context.DefaultAppContext; import com.persagy.fm.common.utils.SecureAES; import org.apache.commons.lang3.StringUtils; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @description: * @author: lixing * @company: Persagy Technology Co.,Ltd * @since: 2021/3/8 9:35 上午 * @version: V1.0 */ public class AppContextHandler extends HandlerInterceptorAdapter { /** 忽略的url - swagger的文档不校验 */ private static final String[] IGNORE_URL = {".html", ".js", ".css", "/swagger-resources"}; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String requestURI = request.getRequestURI(); if (StringUtils.containsAny(requestURI, IGNORE_URL)) { return true; } ensureContextInfo(request.getHeader("token")); return true; } /** * 根据token获取上下文信息 * @param token */ private void ensureContextInfo(String token){ // 从token中解析数据 SecureAES aes = new SecureAES("63499E35378AE1B0733E3FED7F780B68", "C0E7BD39B52A15C7"); JSONObject tokenObj = aes.decrypt(token); // 获取值 String accountId = tokenObj.getString(AppContextConstants.ACCOUNT_ID); String groupCode = tokenObj.getString(AppContextConstants.GROUP_CODE); String appId = tokenObj.getString(AppContextConstants.APP_ID); AppContext.getContext().setAccountId(accountId); AppContext.getContext().setGroupCode(groupCode); AppContext.getContext().setAppId(appId); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { DefaultAppContext.getFactory().unloadContext(); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { DefaultAppContext.getFactory().unloadContext(); } }