添加通过 http header X-Base-Url 来动态传入 baseUrl 的功能 (#252)
* 将 baseUrl 拼接挪到 else 分支下消除特殊情况下(不走else)不必要的拼接处理 * 添加通过 Http Header X-Base-Url 来动态赋值 baseUrl 的功能来实现更灵活代理支持pull/316/head
parent
35a8c4a5a6
commit
026656711d
|
@ -1,6 +1,7 @@
|
||||||
package cn.keking.web.filter;
|
package cn.keking.web.filter;
|
||||||
|
|
||||||
import cn.keking.config.ConfigConstants;
|
import cn.keking.config.ConfigConstants;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
|
|
||||||
import javax.servlet.*;
|
import javax.servlet.*;
|
||||||
|
@ -18,7 +19,7 @@ public class BaseUrlFilter implements Filter {
|
||||||
public static String getBaseUrl() {
|
public static String getBaseUrl() {
|
||||||
String baseUrl;
|
String baseUrl;
|
||||||
try {
|
try {
|
||||||
baseUrl = (String) RequestContextHolder.currentRequestAttributes().getAttribute("baseUrl",0);
|
baseUrl = (String) RequestContextHolder.currentRequestAttributes().getAttribute("baseUrl", 0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
baseUrl = BASE_URL;
|
baseUrl = BASE_URL;
|
||||||
}
|
}
|
||||||
|
@ -33,18 +34,25 @@ public class BaseUrlFilter implements Filter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
|
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
|
||||||
|
|
||||||
String baseUrl;
|
String baseUrl;
|
||||||
StringBuilder pathBuilder = new StringBuilder();
|
|
||||||
pathBuilder.append(request.getScheme()).append("://").append(request.getServerName()).append(":")
|
|
||||||
.append(request.getServerPort()).append(((HttpServletRequest) request).getContextPath()).append("/");
|
|
||||||
String baseUrlTmp = ConfigConstants.getBaseUrl();
|
String baseUrlTmp = ConfigConstants.getBaseUrl();
|
||||||
if (baseUrlTmp != null && !ConfigConstants.DEFAULT_BASE_URL.equalsIgnoreCase(baseUrlTmp)) {
|
|
||||||
|
final HttpServletRequest servletRequest = (HttpServletRequest) request;
|
||||||
|
// 支持通过 http header 中 X-Base-Url 来动态设置 baseUrl 以支持多个域名/项目的共享使用
|
||||||
|
final String urlInHeader = servletRequest.getHeader("X-Base-Url");
|
||||||
|
if (StringUtils.isNotEmpty(urlInHeader)) {
|
||||||
|
baseUrl = urlInHeader;
|
||||||
|
} else if (baseUrlTmp != null && !ConfigConstants.DEFAULT_BASE_URL.equalsIgnoreCase(baseUrlTmp)) {
|
||||||
|
// 如果配置文件中配置了 baseUrl 且不为 default 则以配置文件为准
|
||||||
if (!baseUrlTmp.endsWith("/")) {
|
if (!baseUrlTmp.endsWith("/")) {
|
||||||
baseUrlTmp = baseUrlTmp.concat("/");
|
baseUrlTmp = baseUrlTmp.concat("/");
|
||||||
}
|
}
|
||||||
baseUrl = baseUrlTmp;
|
baseUrl = baseUrlTmp;
|
||||||
} else {
|
} else {
|
||||||
baseUrl = pathBuilder.toString();
|
// 动态拼接 baseUrl
|
||||||
|
baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
|
||||||
|
+ servletRequest.getContextPath() + "/";
|
||||||
}
|
}
|
||||||
BASE_URL = baseUrl;
|
BASE_URL = baseUrl;
|
||||||
request.setAttribute("baseUrl", baseUrl);
|
request.setAttribute("baseUrl", baseUrl);
|
||||||
|
|
Loading…
Reference in New Issue