Spring Hateoas linkto 依赖于 Host 请求标头. 如何避免它并使用来自请求 URL 的主机?



请求正在发送:

GET https://example.com/testing/123456
Request header:
HOST: abcd.com

我得到的回应:

"_links": {
"self": {
"href": "https://abcd.com/data/api/customers"
}
}

有没有办法得到响应

"_links": {
"self": {
"href": "https://example.com/data/api/customers"
}
}

使用 Hateoas 0.25.1.RELEASE

href 不应采用请求主机标头

一种方法是覆盖getServerName:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component 
public class RequestWrapperFilter extends OncePerRequestFilter {

@Value("${com.awgtek.host}")
protected String basePath;
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
HeaderMapRequestWrapper wrappedRequest = new HeaderMapRequestWrapper(httpServletRequest);
filterChain.doFilter(wrappedRequest, httpServletResponse);
}
class HeaderMapRequestWrapper extends HttpServletRequestWrapper {
HeaderMapRequestWrapper(HttpServletRequest request) {
super(request);
}
@Override
public String getServerName() {
return basePath;
}
}
}

见 https://stackoverflow.com/a/47679098/1527469

最新更新