新增redis
parent
1a9fe52756
commit
3f34b0d49c
@ -0,0 +1,57 @@
|
|||||||
|
package com.docus.server.common;
|
||||||
|
|
||||||
|
import com.docus.infrastructure.core.db.KeyGenerator;
|
||||||
|
import com.docus.server.constants.BusinessConstant;
|
||||||
|
import com.docus.server.vo.recovery.UserInfoView;
|
||||||
|
import feign.RequestInterceptor;
|
||||||
|
import feign.RequestTemplate;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
//feign微服务之间调用header传入用户登录信息
|
||||||
|
public class FeignRequestInterceptor implements RequestInterceptor {
|
||||||
|
private static final String internalUserName = " internal";
|
||||||
|
private String token;
|
||||||
|
@Autowired
|
||||||
|
private RedisStringService redisStringService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void apply(RequestTemplate requestTemplate) {
|
||||||
|
ApiRequestContext requestContext = ApiRequestContext.get();
|
||||||
|
if (requestContext != null) {
|
||||||
|
if (requestContext.getIsGrantInternalRequest()) {
|
||||||
|
if (token == null || redisStringService.getValue(BusinessConstant.REDIS_KEY_USER_TOKEN_PREFIX + token, UserInfoView.class) != null) {
|
||||||
|
initToken();
|
||||||
|
}
|
||||||
|
requestTemplate.header(BusinessConstant.HEADER_SYSTEM_CODE, internalUserName);
|
||||||
|
requestTemplate.header(BusinessConstant.HEADER_USER_ID, internalUserName);
|
||||||
|
requestTemplate.header(BusinessConstant.HEADER_API_TOKEN, token);
|
||||||
|
} else {
|
||||||
|
requestTemplate.header(BusinessConstant.HEADER_SYSTEM_CODE, requestContext.getSystemCode());
|
||||||
|
requestTemplate.header(BusinessConstant.HEADER_USER_ID, requestContext.getUserId());
|
||||||
|
requestTemplate.header(BusinessConstant.HEADER_API_TOKEN, requestContext.getToken());
|
||||||
|
if (requestContext.getAdminCode() != null) {
|
||||||
|
requestTemplate.header(BusinessConstant.HEADER_ADMIN_CODE, requestContext.getAdminCode().toString());
|
||||||
|
}
|
||||||
|
if (requestContext.getOwnerId() != null) {
|
||||||
|
requestTemplate.header(BusinessConstant.HEADER_OWNER_ID, requestContext.getOwnerId());
|
||||||
|
}
|
||||||
|
if (requestContext.getAppId() != null) {
|
||||||
|
requestTemplate.header(BusinessConstant.HEADER_APP_ID, requestContext.getAppId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//创建虚拟用户和token,用于微服务直接调用
|
||||||
|
private void initToken() {
|
||||||
|
token = KeyGenerator.genId();
|
||||||
|
UserInfoView userInfoview = new UserInfoView();
|
||||||
|
userInfoview.setToken(token);
|
||||||
|
userInfoview.setUserId(internalUserName);
|
||||||
|
userInfoview.setUserName(internalUserName);
|
||||||
|
userInfoview.setRealName(internalUserName);
|
||||||
|
redisStringService.setValue(BusinessConstant.REDIS_KEY_USER_TOKEN_PREFIX + token, userInfoview, 3, TimeUnit.MINUTES);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.docus.server.common;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
//忽略鉴权验证
|
||||||
|
@Target({ ElementType.METHOD,ElementType.TYPE})
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface IgnoreValidate {
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
package com.docus.server.common;
|
||||||
|
|
||||||
|
import com.docus.server.constants.BusinessConstant;
|
||||||
|
import com.docus.server.vo.recovery.UserInfoView;
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.method.HandlerMethod;
|
||||||
|
import org.springframework.web.servlet.HandlerInterceptor;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
public class RequestContextInterceptor implements HandlerInterceptor {
|
||||||
|
@Autowired
|
||||||
|
private RedisStringService redisStringService;
|
||||||
|
@Autowired(required = false)
|
||||||
|
// private RtmAppApi rtmAppApi;
|
||||||
|
private volatile static ConcurrentHashMap<String, String> appInfoMap = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||||
|
String token = request.getHeader(BusinessConstant.HEADER_API_TOKEN);
|
||||||
|
UserInfoView userInfoview = redisStringService.getValue(BusinessConstant.REDIS_KEY_USER_TOKEN_PREFIX + token, UserInfoView.class);
|
||||||
|
String systemCode = request.getHeader(BusinessConstant.HEADER_SYSTEM_CODE);
|
||||||
|
String appGroup = null;
|
||||||
|
if (StringUtils.isNotBlank(systemCode)) {
|
||||||
|
if (appInfoMap.containsKey(systemCode)) {
|
||||||
|
appGroup = appInfoMap.get(systemCode);
|
||||||
|
} else {
|
||||||
|
// if (rtmAppApi != null) {
|
||||||
|
// RtmApp rtmApp = rtmAppApi.getAppInfoByAppEname(systemCode);
|
||||||
|
// appGroup = rtmApp == null ? null : rtmApp.getAppGroup();
|
||||||
|
// if (StringUtils.isNotBlank(appGroup)) {
|
||||||
|
// appInfoMap.put(systemCode, appGroup);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ApiRequestContext.init(request, response, userInfoview, getAction(handler), appGroup);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||||
|
//清除线程变量
|
||||||
|
ApiRequestContext.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getAction(Object handler) {
|
||||||
|
if (handler instanceof HandlerMethod) {
|
||||||
|
HandlerMethod handlerMethod = (HandlerMethod) handler;
|
||||||
|
String className = handlerMethod.getBeanType().getSimpleName();
|
||||||
|
return className + handlerMethod.getMethod().getName();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue