有没有办法将servlet accessibilty限制到某个端口?

时间:2016-10-13 10:01:39

标签: java servlets port wildfly web.xml

我有一个使用两个不同端口的应用程序,443& 4443.另一个是使用应用程序(UI),另一个是一些自动化客户端的控制通道。

我在web.xml中配置了几个不同的servlet。首先是UI用途,适用于通常通过https-443使用该应用程序的用户:

echo array_sum([true == false, 'cheese' == 'cheese', 5 == 5, 'moon' == 'green cheese']);

我还在web.xml中映射了一个servlet,它只用于端口4443中的客户端,让这个servlet命名为“client_inlet”。这是一个用于POST请求的简单侦听器服务,并且没有用户的功能。

<servlet-mapping>
    <servlet-name>application_ui</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

目前,用户可以从两个端口访问这两个应用程序部分,443&amp; 4443。

我希望实现的是,应用程序的 client_inlet 部分只能使用端口4443实现,并且所有443流量都将重定向到 application_ui < /强>

以下是我想要做的事情(不确定这是否是web.xml中可能的语法,但至少它不起作用):

<servlet-mapping>
    <servlet-name>client_inlet</servlet-name>
    <url-pattern>/ClientInlet</url-pattern>
</servlet-mapping>

使用web.xml配置是否可以实现方案?还是应该在应用服务器端完成?我正在使用WildFly 8.1.0,任何想法如何在standalone.xml中完成这个?

1 个答案:

答案 0 :(得分:0)

我认为你不能在配置中这样做。既然每个端口都是不同的服务器不是吗?在这种情况下,您需要重定向到不同的位置/服务器而不是同一应用程序中的重定向。

我没有看到任何其他方式在代码或应用程序中执行此操作。

使用javax.servlet.Filter实现似乎非常适合此任务。您只需检查路径是否以“/ ClientInlet”开头,然后重定向到其他位置,否则只需继续请求即可。 我不确定我是否获得了有关重定向的详细信息,但以下内容似乎是合适的:

过滤代码:

String path = request.getRequestURI();
if(path.equals("/ClientInlet"))
{//Redirect the client to the new location i.e. the other port
    response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
    response.setHeader("Location", "https://someserver.com:port/ClientInlet");
} else
{//Just forward the request to the servlet
   filterChain.doFilter(servletRequest, servletResponse);
}