我有这样的过滤器:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(req);
String host = requestWrapper.getHeader("Host");
String _protocol = requestWrapper.getProtocol(); // e.g. HTTP/1.1
if(host == null || host.isEmpty()) {
host = "127.0.0.1:8080";
}
System.out.println("====================================================");
System.out.println("Updating Host: " + host);
System.out.println("====================================================");
requestWrapper.addHeader("Host", host);
chain.doFilter(requestWrapper, response); // Goes to default servlet.
}
我想知道是否可以修改过滤器内部的协议(_protocol
)ServletRequest
?
您可以创建一个子类HttpServletRequestWrapper
并覆盖getProtocol
. 只要任何受影响的代码仅使用getProtocol
获取协议的方法(而不是使用协议的内部值),那么您就可以替换ProtocolFixRequest
原始HttpServletRequest
预期的任何地方。例如:
public class ProtocolFixRequest extends HttpServletRequestWrapper {
private final String fixedProtocol;
public ProtocolFixRequest(HttpServletRequest request, String protocol) {
super(request);
fixedProtocol = protocol;
}
@Override
public String getProtocol() {
return fixedProtocol;
}
}
要使用它:
HttpServletRequest fixedRequest = new ProtocolFixRequest(originalRequest, "myProtocol");
chain.doFilter(fixedRequest, response);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句