新增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