Tomcat HTTPS仅限1个端点

时间:2017-06-14 15:15:00

标签: java tomcat

我已经在server.xml中配置了我的连接器,重定向从8080到8443,并在web.xml中使用相应的子标签设置security-constraint。它正确地重定向,但我想忽略HTTP访问并仅使用HTTPS。所以我不需要重定向或类似的东西。外部服务需要端点的HTTP访问,我想只通过HTTP启用该端点。

我尝试删除带有8080端口的连接器,但是使用这种方法,没有机会通过http获取请求。

1 个答案:

答案 0 :(得分:1)

如果您停用http连接,则无法通过http访问您的应用程序。

因此,您可以实现一个过滤器,检查当前请求的协议是否为HTTP并允许端点URL,否则阻止请求。

在您的web.xml中,您可以声明以下过滤器:

<filter>
    <filter-name>blockHttpFilter</filter-name>
    <filter-class>com.example.BlockHttpFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>urlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

实施可能如下:

public class BlockHttpFilter implements Filter {

    private ServletContext context;

    public void init(FilterConfig fConfig) throws ServletException {
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        if(req.isSecure() && checkHttpEnpointPath(req)){
            chain.doFilter(request, response);
        } else {
            HttpServletResponse res = (HttpServletResponse)response;
            res.sendError(403);
         }
    }

    public void destroy() {
        //we can close resources here
    }

}