阻止Http访问api

时间:2016-02-20 13:10:06

标签: java spring spring-mvc spring-security https

是否可以阻止未使用https的请求在代码中调用get / post。

例如,我正在使用 java spring 实现rest api,如果他们不使用https,我想将http状态返回给调用者。< / p> 使用https的

/api/getBlah将返回该项,但仅使用http将无效并返回相应的http状态。

2 个答案:

答案 0 :(得分:1)

对于API服务器,我强烈建议您不回复重定向

如果您确实回答了重定向,如果开发人员错误地使用您的API的http版本,他将不会立即看到他使用了不安全的连接

如果您回答“400 Bad Request”,“401 Unauthorized”或“405 Method Not Noted”,并且机构解释说只允许https,那么开发人员会立即看到问题。

简而言之,在API中回复重定向http =&gt; https会鼓励不良做法

答案 1 :(得分:0)

有几种不同的处理方法。在我看来, Web服务器处理是最常见的,并且充分利用了Web服务器和应用程序服务的优势。

网络服务器处理

如上面的评论中所述,部署Java Web应用程序的常用方法是将Web服务器(例如apache或nginx)放在Java Application Server(tomcat,wildfly,jetty等)的前面。然后,Web服务器将请求代理到应用程序服务器。

在这样的设置中,您只需返回静态响应或重定向用户。这样,您无需从自己的Java应用程序返回任何特殊内容。 Web服务器为您解决问题。

应该注意(如@Tom的答案),在API用例中,HTTP到HTTPS重定向不是最好的方法。这通常是

Application Server单独的Servlet

在Java方面,您实际上可以创建两个单独的Web应用程序。第一个将配置为从HTTP侦听器接收请求,并提供正确的错误消息或重定向。另一个将是您的主应用程序,并将配置为仅接收来自HTTPS侦听器的请求。

再次使用静态错误进行响应最适合API。

Application Server单一应用程序

当servlet处理请求时,它将填充ServletRequest中的信息,包括有关请求是否安全的信息(使用HTTPS)。请参阅[ServletRequest文档] [2],特别是isSecure()方法。您可以检查应用程序中的ServletReuest,以确定响应请求的适当方式。

不回答 您还可以简单地将Web服务器/应用服务器配置为不侦听HTTP请求。您将错过更改以向用户提供合理的错误,但您将实现不允许任何HTTP请求的影响。