Java servlet:如何删除标题;“参考”;重定向?

Java servlet:如何删除标题;“参考”;重定向?,java,servlets,redirect,header,referer,Java,Servlets,Redirect,Header,Referer,在Javaservlet上执行重定向时,是否可以删除头引用器? 有点 我也试过过滤器。它甚至不在响应时调用setHeader或addHeader方法。看起来我无法更改现有的筛选器。我发现了这样的文章 }标准Servlet API无法删除响应头。您可以通过创建一个筛选器来防止设置标头,该筛选器将ServletResponse替换为自定义的HttpServletResponseWrapper实现,该实现在标头名称为Content Disposition时跳过setHeader()的作业。 这是一个类

在Javaservlet上执行重定向时,是否可以删除头引用器? 有点

我也试过过滤器。它甚至不在响应时调用setHeader或addHeader方法。看起来我无法更改现有的筛选器。我发现了这样的文章


}标准Servlet API无法删除响应头。您可以通过创建一个筛选器来防止设置标头,该筛选器将ServletResponse替换为自定义的HttpServletResponseWrapper实现,该实现在标头名称为Content Disposition时跳过setHeader()的作业。 这是一个类似的问题:

似乎无法删除标题

响应上根本没有设置
引用者
标题。它是在请求中设置的。通过重定向,您基本上是指示客户机自己创建一个全新的请求。该请求是在客户端而不是服务器端创建的

真正的技术问题是根本无法从服务器端更改请求头。然而,响应头在服务器端是可以修改的,因为实际上是服务器自己创建的

您最接近的赌注是重定向到一个代理,该代理恰好是您自己的或您完全控制的代理,然后让代理依次剥离请求头。或者,让servlet本身充当代理。

response.setContentType(“text/html”);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<script>window.location.href='" + url + "';</script>");
out.close();
PrintWriter out=response.getWriter(); out.println(“window.location.href=”+url+“;”); out.close();
由于浏览器添加了
Referer
,因此可以使用
js
重定向

import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

@Component
public class HeaderFilter extends OncePerRequestFilter {

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
        throws ServletException, IOException {
    filterChain.doFilter(new HeaderHttpRequestWrapper(request), new HeaderHttpResponsetWrapper(response));

}

private static class HeaderHttpRequestWrapper extends HttpServletRequestWrapper {

    public HeaderHttpRequestWrapper(HttpServletRequest request) {
        super(request);

    }

    @Override
    public String getHeader(String name) {
        if ("Referer".equalsIgnoreCase(name))
            return "";
        return super.getHeader(name);
    }

}

private static class HeaderHttpResponsetWrapper extends HttpServletResponseWrapper {

    public HeaderHttpResponsetWrapper(HttpServletResponse response) {
        super(response);

    }

    @Override
    public void sendRedirect(String location) throws IOException {
        // TODO Auto-generated method stub
        super.sendRedirect(location);
    }

    @Override
    public void addHeader(String name, String value) {
        if ("Referer".equalsIgnoreCase(name))
            return;
        super.addHeader(name, value);
    }

    @Override
    public void setHeader(String name, String value) {
        if ("Referer".equalsIgnoreCase(name))
            return;
        super.setHeader(name, value);
    }

}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<script>window.location.href='" + url + "';</script>");
out.close();