当前位置: 首页 > 知识库问答 >
问题:

Java servlet:如何在重定向时删除头“referer”?

巫新知
2023-03-14
response.setHeader("Referer", null);
response.sendRedirect(url)
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);
    }

}

共有1个答案

赖明煦
2023-03-14

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

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

您最接近的选择是重定向到一个代理,它碰巧是您自己的或者您完全控制的代理,然后让代理剥离请求头。或者,只让servlet本身充当代理。

 类似资料:
  • 问题内容: 在发送http消息之前,是否可以使用javascript / XmlHttpRequest删除一些特定的HTTP标头? 我使用的是专有浏览器,因此无法使用特定于浏览器的解决方案来实现。 例如,我要在发送消息之前删除标题“ Authorization” 问候 问题答案: 假设您的浏览器支持XmlHttpRequest对象,则可以使用XmlHttpRequest对象的setRequestH

  • 我在我的表格中使用了邪恶宝石。事情是,当用户上传照片,他们可以看到在同一页的<代码>..../步骤/图片。在图片页面,用户可以销毁图片。当用户点击时,我想让他们重定向到步骤/图片页面,但无论我尝试什么,我都得到错误。船和图片关联,但不嵌套路线。 这是我的图片控制器动作; def摧毁 结束 控制器; 编辑1: 编辑: 船步控制器

  • 我构建了一个使用BingAPI下载数据集的代码。当我在终端上运行它时,它返回以下错误: 所以我升级了Numpy,但没有用 那么我该怎么做呢?

  • 我已经创建日期选择器作为一个按钮,当悬停它时,它在chrome浏览器中看起来很乱。可能原因只是因为它在浏览器中的默认行为,但是我可以在chrome上更改悬停效果吗? Firefox中的图像: 默认<代码> 按钮<代码> 镀铬图像: 默认<代码> 按钮<代码> 有没有办法消除Chrome上的悬停效果?

  • 我正在使用 MEAN 堆栈用户注册和登录示例 我想将图像上传到Cloudinary,但收到此错误: XMLHttpRequest无法加载https://api.cloudinary.com/v1_1/xxxx/upload.请求标头字段授权不被预检响应中的Access-Control-Allow-Headers允许。 如何为Cloudinary的请求删除此标头?

  • 问题内容: 我有一个CSS文件,当我使用gedit打开它时看起来不错,但是当PHP读取它(将所有CSS文件合并为一个文件)时,该CSS前面有以下字符: PHP删除了所有空格,因此代码中间的一个随机“ 正如我提到的,当我在gedit中打开文件时,我实际上看不到这些字符,因此我无法轻松地删除它们。 我用谷歌搜索了这个问题,文件编码显然有问题,这是有道理的,因为我一直在通过ftp和rsync使用文