简而言之 - 我想将这样的服务端点添加到我的servlet中,只能从localhost调用。限制应该在servlet本身编码,即它不应该依赖于以某种方式配置的Tomcat / Apache。同时,还有许多其他现有端点应该可以在外部访问。
更长的描述 - 我正在创建一个第三方可以实现的HTTP API,以便与我的应用程序集成。我还提供了一个默认实现,与我的应用程序捆绑在一起,具有简单要求的客户可以使用,而无需实现任何内容。
我的默认实现的端点只能用于我的应用程序,它恰好是与提供实现的servlet相同的servlet,即它在同一主机上运行。因此,出于安全原因(API与安全性相关),我希望我的实现仅适用于我的应用程序,在第一轮中,这意味着限制对一组HTTP端点的localhost访问。
同时,我不想依赖客户正确设置容器/代理,而是在我的servlet中执行限制,以便现有安装不需要进行任何更改。
到目前为止,我唯一的想法是在servlet过滤器中检查请求者的IP地址 - 所以我想知道是否有更好,更复杂的方法。
答案 0 :(得分:1)
我认为您应该将Web Filter添加到您的应用程序中,并在doFilter方法中检查您的URL。检查您可以放入urlPattern的request.getRemoteAddr()和端点链接。
像这样:
@WebFilter(urlPatterns = "/*")
public class RequestDefaultFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (isForbidden(request, response))
return;
else
chain.doFilter(request, response);
}
}
isForbidden实现由您决定。作为响应,您只需发送403错误代码。
您可以检查在servlet中进行相同的检查并发送响应403错误。