New file |
| | |
| | | package com.kidgrow.ribbon.config; |
| | | |
| | | import com.kidgrow.common.constant.CommonConstant; |
| | | import com.kidgrow.common.constant.SecurityConstants; |
| | | import feign.RequestInterceptor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.web.context.request.RequestContextHolder; |
| | | import org.springframework.web.context.request.ServletRequestAttributes; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.util.ArrayList; |
| | | import java.util.Enumeration; |
| | | import java.util.List; |
| | | |
| | | |
| | | /** |
| | | * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> |
| | | * |
| | | * @Description: feign拦截器,只包含http相关数据 |
| | | * @Project: <br> |
| | | * @CreateDate: Created in 2020/2/21 13:31 <br> |
| | | * @Author: <a href="4345453@kidgrow.com">liuke</a> |
| | | */ |
| | | @Slf4j |
| | | public class FeignHttpTenantInterceptorConfig { |
| | | protected List<String> requestHeaders = new ArrayList<>(); |
| | | |
| | | @PostConstruct |
| | | public void initialize() { |
| | | requestHeaders.add(SecurityConstants.USER_ID_HEADER); |
| | | requestHeaders.add(SecurityConstants.DOCTOR_ID_HEADER); |
| | | requestHeaders.add(SecurityConstants.USER_HEADER); |
| | | requestHeaders.add(SecurityConstants.USER_DEP_ID_HEADER); |
| | | requestHeaders.add(SecurityConstants.USER_DEP_NAME_HEADER); |
| | | requestHeaders.add(SecurityConstants.USER_ORG_ID_HEADER); |
| | | requestHeaders.add(SecurityConstants.USER_ORGS_HEADER); |
| | | requestHeaders.add(SecurityConstants.USER_ORG_NAME_HEADER); |
| | | requestHeaders.add(SecurityConstants.ROLE_HEADER); |
| | | requestHeaders.add(SecurityConstants.CLIENT_HEADER); |
| | | //requestHeaders.add(SecurityConstants.TENANT_HEADER); |
| | | requestHeaders.add(CommonConstant.KIDGROW_VERSION); |
| | | requestHeaders.add(CommonConstant.USER_AGENT_BROWSER); |
| | | requestHeaders.add(CommonConstant.USER_AGENT_IP); |
| | | requestHeaders.add(CommonConstant.USER_AGENT_SYSTEM_SCREEN); |
| | | requestHeaders.add(CommonConstant.USER_AGENT_SYSTEM); |
| | | requestHeaders.add(SecurityConstants.USER_HOSPITAL_ID_HEADER); |
| | | requestHeaders.add(SecurityConstants.USER_REAL_NAME); |
| | | } |
| | | |
| | | /** |
| | | * 使用feign client访问别的微服务时,将上游传过来的access_token、clientid、tenantid、username、roles等信息放入header传递给下一个服务 |
| | | */ |
| | | @Bean |
| | | public RequestInterceptor httpFeignInterceptor() { |
| | | return template -> { |
| | | ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder |
| | | .getRequestAttributes(); |
| | | if (attributes != null) { |
| | | HttpServletRequest request = attributes.getRequest(); |
| | | Enumeration<String> headerNames = request.getHeaderNames(); |
| | | if (headerNames != null) { |
| | | String headerName; |
| | | String headerValue; |
| | | while(headerNames.hasMoreElements()) { |
| | | headerName = headerNames.nextElement(); |
| | | if (requestHeaders.contains(headerName)) { |
| | | headerValue = request.getHeader(headerName); |
| | | template.header(headerName, headerValue); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //传递access_token,无网络隔离时需要传递 |
| | | /* |
| | | String token = extractHeaderToken(request); |
| | | if (StrUtil.isEmpty(token)) { |
| | | token = request.getParameter(CommonConstant.ACCESS_TOKEN); |
| | | } |
| | | if (StrUtil.isNotEmpty(token)) { |
| | | template.header(CommonConstant.TOKEN_HEADER, CommonConstant.BEARER_TYPE + " " + token); |
| | | } |
| | | */ |
| | | } |
| | | }; |
| | | } |
| | | |
| | | /** |
| | | * 解析head中的token |
| | | * @param request |
| | | */ |
| | | private String extractHeaderToken(HttpServletRequest request) { |
| | | Enumeration<String> headers = request.getHeaders(CommonConstant.TOKEN_HEADER); |
| | | while (headers.hasMoreElements()) { |
| | | String value = headers.nextElement(); |
| | | if ((value.toLowerCase().startsWith(CommonConstant.BEARER_TYPE))) { |
| | | String authHeaderValue = value.substring(CommonConstant.BEARER_TYPE.length()).trim(); |
| | | int commaIndex = authHeaderValue.indexOf(','); |
| | | if (commaIndex > 0) { |
| | | authHeaderValue = authHeaderValue.substring(0, commaIndex); |
| | | } |
| | | return authHeaderValue; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | } |