如何使用过滤器为 ServletRequest 设置协议

夸克

我有这样的过滤器:

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.
    }

我想知道是否可以修改过滤器内部的协议(_protocolServletRequest

贾斯汀阿尔巴诺

您可以创建一个子类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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用过滤器设置过滤数组?

使用过滤器时如何设置条件?

ServletRequest过滤器测试用例

如何获取ServletRequest的RequestMethod?

设置响应头不使用过滤器-RESTeasy

如何在谷歌表中应用过滤器将行中的单元格设置为FormFormula()?

MS Access Form:将 Allow Edit 设置为 No,然后使用组合框应用过滤器

Servlet过滤器:如何从ServletRequest中获取所有标头?

如何在 LibGDX 中为动画设置过滤器?

如何使用JSON_VALUE为JSON数据设置多个过滤器?

使用过滤器以自定义格式设置日期格式

使用过滤器输入在$ _post中设置一个值

角度:在控制器中使用过滤器设置对象

将过滤器设置为全部

使用过滤器(EnumDropDownListFor)从详细信息返回“索引”页面设置MVC ASP.NET

如何设置Django过滤器以全选

如何设置纹理过滤器

为给定协议实例设置JGroups的协议日志级别

如何使用Boost WebOScket设置子协议

如果没有过滤器,如何将卡片设置为默认值?如何为页面设置默认过滤器?

如何从单例spring bean内部访问ServletRequest?

如何在PyCharm中将isort过滤器设置为外部工具

如何在Angular.js中为我的Json数据设置初始过滤器?

如何在Android上将输入过滤器设置为仅接受BINARY字符(0或1)?

如何在Windows 7索引搜索中为特定文件类型设置过滤器?

如何在.testcaferc配置文件中为夹具元设置多个过滤器?

如何符合协议变量的设置和获取?

为CasAuthenticationFilter设置预身份验证过滤器

设置为右键单击的过滤器按钮属性