码头服务器配置

2024-04-08

我使用 Jetty 9,但配置有一些问题。我简单的 REST 效果很好。但是当我尝试向所有请求和错误处理程序添加新标头时,问题就开始了。我能够处理标头的唯一方法是将以下代码添加到每个响应中:

return Response.ok(murals)
                .header("Access-Control-Allow-Origin", "*")
                .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT")
                .build(); 

服务器配置:

        Server server = new Server(9998);
        ServletContextHandler servletContextHandler = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);

        servletContextHandler.addFilter(GuiceFilter.class, "/*", EnumSet.allOf(DispatcherType.class));
        servletContextHandler.addServlet(DefaultServlet.class, "/");

        ResourceConfig rc = new ResourceConfig()
                .register(FilterHeaders.class)
                .register(ExceptionNotFound.class)
                .register(CORSFilter.class); //doesnt work
        new ServletHolder(new ServletContainer(rc));

        HandlerWrapper han = new HandlerWrapper();
        han.setHandler(new AbstractHandler() {

            @Override
            public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
               request.setAttribute("welcome","Hello"); //doesn't work
            }
        });

        servletContextHandler.addFilter(Filters.class, "/*", EnumSet.of(DispatcherType.REQUEST)); //doesnt work

        ResourceHandler resourceHandler = resourceHandler();
        servletContextHandler.setHandler(resourceHandler);
        servletContextHandler.setHandler(han);
        server.start();
        server.join();

CROS过滤器类

 public class CORSFilter implements ContainerResponseFilter {

        @Override
        public ContainerResponse filter(ContainerRequest request,
                ContainerResponse response) {

            response.getHttpHeaders().add("Access-Control-Allow-Origin", "*");
            response.getHttpHeaders().add("Access-Control-Allow-Headers",
                    "origin, content-type, accept, authorization");
            response.getHttpHeaders().add("Access-Control-Allow-Credentials", "true");
            response.getHttpHeaders().add("Access-Control-Allow-Methods",
                    "GET, POST, PUT, DELETE, OPTIONS, HEAD");

            return response;
        }

    }

如何注册标头?我究竟做错了什么? 我不使用WEB配置。


您正在将 Jersey 1.x 与 Jersey 2.x 混合,这应该not做完了。您的过滤器类基于 Jersey 1.x。你的ResourceConfig是泽西岛 2.x。我知道这一点是因为 Jersey 1.xResourceConfig没有register()方法。对于 Jersey 1.x,这就是我们注册上述过滤器的方式

resourceConfig.getContainerResponseFilters().add(new CORSFilter());

这就足够了。但 Jersey 2.x 没有这种添加过滤器的方式。我们需要register一切。

话虽这么说,如果您使用 Jersey 2.x,我强烈建议您摆脱所有 Jersey 1.x 依赖项。这样做之后,您会注意到的第一件事是您的过滤器类将不再编译。重构的 2.x 过滤器应如下所示:

import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext request,
            ContainerResponseContext response) throws IOException {
        response.getHeaders().add("Access-Control-Allow-Origin", "*");
        response.getHeaders().add("Access-Control-Allow-Headers",
                "origin, content-type, accept, authorization");
        response.getHeaders().add("Access-Control-Allow-Credentials", "true");
        response.getHeaders().add("Access-Control-Allow-Methods",
                "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    }
}

使用上面的过滤器应该可以。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

码头服务器配置 的相关文章

  • 如何将画廊意图中的“打开”更改为“完成”?

    我使用以下意图打开画廊来选择多个图像和视频 Intent intent new Intent intent setType image video intent putExtra Intent EXTRA ALLOW MULTIPLE tr
  • @RestController 没有 @ResponseBody 方法工作不正确

    我有以下控制器 RestController RequestMapping value base url public class MyController RequestMapping value child url method Req
  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 使用嵌套的 hashmap 参数发送 volley 请求

    我正在使用 android volley 框架向我的服务器发送 jsonobject 请求 get 请求工作正常 现在我想发送一个带有请求参数的 post 请求 该请求参数是嵌套的 hashmap 我重写 getparams 方法 但它期望
  • Java:如何为山区时间创建 TimeZone 对象?

    必须不禁用夏令时 嗯 在这个清单 http en wikipedia org wiki List of tz database time zones在 zoneinfo 时区名称中 有很多声称是 山地时间 找到最适合您想要的那个 然后使用它
  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • GWT 2.3 开发模式 - 托管模式 JSP 编译似乎不使用 java 1.5 兼容性

    无法编译 JSP 类 生成的 servlet 错误 DefaultMessage 上次更新 0 日期 中 0 时间 HH mm ss z 语法 错误 注释仅在源级别为 1 5 时可用 在尝试以开发模式在 Web 浏览器中打开我的 gwt 模
  • Java实现累加器类,提供Collector

    A Collector具有三种通用类型 public interface Collector
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • 最适合“正在进行的作业”的 HTTP 状态代码

    向客户端提供的最合适的 HTTP 状态代码是什么 表示 您的请求很好 但仍在进行中 请稍后在完全相同的位置回来查看 例如 假设客户端提交初始请求以启动繁重的查询 服务器立即返回一个 URL 客户端可以定期轮询该 URL 以获取结果 如果客户
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox
  • Java中HashMap和ArrayList的区别?

    在爪哇 ArrayList and HashMap被用作集合 但我不明白我们应该在哪些情况下使用ArrayList以及使用时间HashMap 他们两者之间的主要区别是什么 您具体询问的是 ArrayList 和 HashMap 但我认为要完
  • 将 Apache Camel 执行器指标发送到 Prometheus

    我正在尝试转发 添加 Actuator Camel 指标 actuator camelroutes 将交换 交易数量等指标 发送到 Prometheus Actuator 端点 有没有办法让我配置 Camel 将这些指标添加到 Promet
  • 泛型、数组和 ClassCastException

    我想这里一定发生了一些我不知道的微妙事情 考虑以下 public class Foo
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio

随机推荐

  • iPhone 的精灵表生成器? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 到目前为止 我一直在制作自己的 1024 1024 精灵表 将图像放置在 64 x 64 网格中 以帮助轻松识别每个精灵的位置和大小 不用
  • Google 地图 - 从 ROADMAP 中删除网格

    I m integrating the google map in my site It works fine However it shows grid like this 我想删除它以使地图更美观 任何人都知道如何删除它 Thanks
  • 如何使用 JPA CriteriaBuilder 查询执行外连接?

    我正在使用 JPA 2 0 Hibernate 4 1 0 Final 和 MySQL 5 5 27 我想构造一个 JPA 查询 每行返回两个实体 并且我想执行右外连接 这两个实体是 Entity Table name user uniqu
  • 无法从 Dropbox 检索图像

    你好 我有一个图像滑块 当我尝试从服务器检索图像时 图像会正确显示 http stthomasmountmtc org index html http stthomasmountmtc org index html 但是 当我尝试从 Dro
  • 我无法在 .NET MAUI 中显示带下划线的条目

    我曾在 Xamarin 平台工作过 现在正在学习 NET MAUI 尽管有很多相似之处 但我面临着某些问题 我无法按照 NET MAUI 文档声明的方式在 Android 设备上显示基本的输入控件 以下是输入字段的代码片段
  • C++ 和其他语言有小提琴类型的东西吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我记得曾经见过一个 jsfiddle 类型的东西 在线编译器 您可以在其中指定语言 c c asm 以及
  • 辅助阅读将列表视图中的项目显示为列表项 + 标题视图

    我正在自定义下拉刷新列表视图中实现可访问性 我的下拉刷新列表视图有一个标题视图 用于在下拉时显示更新状态 如果我的列表仅包含 5 个项目 Talkback 将其读取为 显示第 1 项 共 6 项 而不是 显示第 1 项 共 5 项 我认为总
  • 我们为什么使用 ViewModel?

    我最近开始担任网络开发人员 我使用 ASP NET MVC 4 和 NHibernate 在我的工作场所 我们严格要求使用视图模型在控制器和视图之间来回传输数据 并且视图模型不应包含模型的任何对象 我知道它是控制器和视图之间的一层 但我发现
  • 安卓。 Facebook 分享对话框在 Android 6.0+ 上立即关闭

    我正在尝试通过 Facebook 共享对话框共享图像 这是代码 private void startFacebookShare SharePhoto photo new SharePhoto Builder setBitmap getCap
  • IBOutlet 应该是 ivars 还是属性?

    尽管我确信它们存在 但我很难找到或确定在 ViewController 中声明出口的官方最佳实践 据我所知 有 3 个选项 仅伊瓦尔 仅限财产 由 ivar 支持的财产 当前 当我尝试通过从 IB 拖入 ViewController 来自动
  • 重新初始化 JQuery 有 XPage 部分刷新更新 DOM

    我有一个来自核心控件的选项卡式面板 里面是一个
  • Python FastAPI:返回的 gif 图像没有动画

    下面是我的 Python FastAPI 路由和 HTML 页面 Python app get status code 200 async def upload file file UploadFile File error img Ima
  • HTML5 / JavaScript:打开文本文件,加载到文本区域/将文本区域内容保存到文本文件

    我想在浏览器中做两件事 将文本文件加载到文本区域 必须通过对话框选择 将文本区域的内容保存到文本文件中 必须再次通过对话框选择 加载视频文件并获取文件路径以将其与视频播放器一起使用 1 http www longtailvideo com
  • Rails 2:当 id 1 不存在时,Model.find(1) 给出 ActiveRecord 错误

    我正在使用 Rails 2 3 5 如果我给出Model find 1 如果 1 不在数据库中 则返回 ActiveRecord 错误 是否应该回归nil正如以下情况Model find by column 这是预期的行为 我认为 Davi
  • 使用 JSON 字符串解析 URL 时捕获 IllegalArgumentException

    我需要使用 JSON 数据制定一个 url 如下所示 http someurl com passfail parameter http someurl com passfail parameter data1 123456789 data2
  • 将EhCache磁盘存储内容加载到内存中

    正如中所述EhCache文档 http ehcache org documentation get started storage options 在实践中 这意味着持久内存缓存将启动 其所有元素都在磁盘上 因此 Ehcache 设计不会在
  • 如何获得最大可能的精度? (Python - 十进制)

    我正在使用Decimal https docs python org 2 library decimal html用于需要精度的操作的类 我想使用 最大可能 的精度 我的意思是 程序运行的系统可以处理的精确度 要设置一定的精度很简单 imp
  • 在 Linq to Sql 中调用 InsertOnSubmit 时出现 NullReferenceException

    我尝试使用 LINQ to SQL 将新对象插入到数据库中 但当我在下面的代码片段中调用 InsertOnSubmit 时 出现 NullReferenceException 我传入一个名为 FileUploadAudit 的派生类 并设置
  • 移动 .git 目录

    我有一个在项目学习曲线早期创建的存储库 随着我了解更多 我意识到这会产生问题 因为我想要跟踪的一些文件在编译的源代码中并不需要 我想做的是创建一个新的 项目 父目录 将现有的源目录移动到该父目录中 并将不需要编译的文件迁移到该父目录中 用
  • 码头服务器配置

    我使用 Jetty 9 但配置有一些问题 我简单的 REST 效果很好 但是当我尝试向所有请求和错误处理程序添加新标头时 问题就开始了 我能够处理标头的唯一方法是将以下代码添加到每个响应中 return Response ok murals