如何配置Java Jersey在不同端口上作为Web应用程序运行的Tomcat

时间:2015-04-24 12:28:32

标签: java rest tomcat jersey server.xml

我正在开发一个Java Server Faces动态Web应用程序。我有一些机器人通过Jersey的RETSful Web服务与这个Web应用程序进行通信。到目前为止一切顺利,一切正常。

但我想要的是为Web应用程序和Web服务提供不同的端口。我无法帮助自己管理Tomcat的server.xml中的配置。

  

有人知道如何在该上下文中配置连接器,引擎或上下文?备注:Web服务正常运行。我只是希望服务在除应用程序其余部分之外的另一个端口上运行。

示例:

http://localhost:8080/mywebapp/rest/helloworld 应该有端口4444 http://localhost:8080/mywebapp/faces/index.xhtml 应保留端口8080

如果您有任何疑问,请不要犹豫,我会回复。

更新

我有一个WAR文件。在这个WAR文件中,我有两个不同的servlet(JSF和Jersey)。这两个servlet应该在两个不同的端口上运行。我只想要一个连接器连接到Jersey的servlet和JSF Servlet的连接器。

为什么我要这个配置?

我不希望任何人有权访问我的Jersey-Servlet。传输的XML不包含超级机密信息,但没有人需要查看它。它仅用于与机器人通信。

用户应查阅已说明传输的网站。机器人不需要访问webapp(servlet)的这一部分。

必须解决此安全问题。

2 个答案:

答案 0 :(得分:1)

将其添加到service子句中的server.xml:

<Connector port="8080" protocol="HTTP/1.1"/>
<Connector port="4444" protocol="HTTP/1.1"/>

您可能已经定义了8080端口,因此可能不应添加。

在您的应用程序的WEB-INF中的web.xml中,您可以使用以下内容来编写REST实现:

<servlet-mapping>
    <servlet-name>ServletAdaptor</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

哪个定义了包含“rest”的url应该转到你的webservice实现,所有其他url应该返回你的HTML文件。

希望这有帮助。

答案 1 :(得分:1)

评论太长了,所以我要添加另一个答案:

好的,据我所知,你想做的是阻止访问你的休息服务(mywebapp / rest) 正在使用端口8080来访问该应用程序。并且您希望使用可用的配置文件执行此操作 一个tomcat服务器。 AFAIK这是不可能的,因为唯一的配置子句(server.xml中的连接器)知道端口 不知道URL(/ rest /)的哪一部分标识了要阻止的应用程序部分。知道URL的应用程序配置文件(web.xml和其他)不知道端口! 但是还有其他一些选择。要描述一些:添加一个apache webserver作为你的代理 tomcat的。这是标准做法,因为它具有安全优势,但我能理解你是否认为这个解决方案太多了。 另一种可能性是将JSF和REST代码分成两个单独部署的战争。接下来,在server.xml中定义两个服务,并将其放入各个端口的连接器中,如前所述。在host子句的appBase参数中,您可以指定其余代码和jsf代码的放置位置。这个解决方案当然让人联想到xerx593描述的解决方案,但是有很多工作要做,我尝试了它带我大约10分钟。当然,如果两个模块具有公共代码,则拆分应用程序可能很困难,但您始终可以将公共代码部署两次。 如果检查请求的端口或客户端地址,您可能也会阻止代码中的请求。 Spring可能会对此有所帮助。