我正在开发一个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)的这一部分。
必须解决此安全问题。
答案 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可能会对此有所帮助。