Servlet过滤器包装器-更改内容类型时遇到麻烦

Servlet过滤器包装器-更改内容类型时遇到麻烦,第1张

Servlet过滤器包装器-更改内容类型时遇到麻烦

我找到了答案。诀窍是防止我的Web服务使用包装器设置内容类型:

public class IE8FilterResponseWrapper extends HttpServletResponseWrapper {    public IE8FilterResponseWrapper(HttpServletResponse response) {        super(response);    }    public void forceContentType(String type) {        super.setContentType(type);     }    public void setContentType(String type) {    }    public void setHeader(String name, String value) {        if (!name.equals("Content-Type")) { super.setHeader(name, value);        }    }    public void addHeader(String name, String value) {        if (!name.equals("Content-Type")) { super.addHeader(name, value);        }    }     public String getContentType() {          return super.getContentType();      } }

现在我的过滤器如下所示:

public class IE8Filter implements Filter {    private Logger logger = LoggerHelper.getLogger();    @Override    public void destroy() {}    @Override    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {         HttpServletRequest request = (HttpServletRequest) req;         HttpServletResponse response = (HttpServletResponse) res;         String userAgent = request.getHeader("User-Agent");         logger.debugf("User Agent  = '%s'", userAgent);         IE8FilterResponseWrapper wrapper = new IE8FilterResponseWrapper(response);         if (userAgent.contains("MSIE 8") || userAgent.contains("MSIE 7")) {  wrapper.forceContentType("text/html");  chain.doFilter(req, wrapper);         }         else {  chain.doFilter(req, res);         }    }    @Override    public void init(FilterConfig arg0) throws ServletException {}}

我不确定这是否是打算使用包装器的方式,但确实可行。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5487318.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存