gpt4 book ai didi

java - Tomcat HTTPS 仅 1 个端点除外

转载 作者:行者123 更新时间:2023-11-28 22:49:36 26 4
gpt4 key购买 nike

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

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

最佳答案

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

因此您可以实现一个过滤器来检查当前请求的协议(protocol)是否为 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
}

}

关于java - Tomcat HTTPS 仅 1 个端点除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44548634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com