HTTPS和RESTEasy

时间:2011-06-28 17:26:26

标签: jax-rs resteasy

在RESTEasy配置(使用2. *)或jax-rs中是否有办法不允许http访问任何基于REST的Web服务?我想只在https下提供Web服务端点。

3 个答案:

答案 0 :(得分:4)

在tomcat中,它基于每个端口完成。看起来有3个步骤来设置它。

1)创建KeyStore文件。我用java来生成这个命令如下

Keytool –genkey –alias presto  –keypass prestoAdmin  –keystore presto.bin –storepass prestoAdmin

将presto.bin文件复制到tomcat的webapps目录

2)为tomcat设置server.xml

<Connector port=”PORT_TO_BE_SCURED”  maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile../webapps/presto.bin " keystorePass="prestoAdmin"
clientAuth="false" sslProtocol="TLS"/>

3)配置Web服务以使用安全连接。将以下内容添加到web.xml

<security-constraint>
<web-resource-collection>
<web-resource-name>securedapp</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

我从http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html

取出了这个

答案 1 :(得分:3)

我认为这个配置不应该在RESTEasy端,而应该在servlet容器或Web服务器上。

例如,如果运行Tomcat,则在server.xml中从8080端口删除连接器,并为8443端口定义一个连接器。所以Tomcat不再接受http流量了。

答案 2 :(得分:3)

我是这样做的:

HttpServletRequest httpServletRequest =
    ResteasyProviderFactory.getContextData(HttpServletRequest.class);
HttpServletResponse httpServletResponse =
    ResteasyProviderFactory.getContextData(HttpServletResponse.class);

if (!httpServletRequest.isSecure())
{
    try
    {
        httpServletResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "Use HTTPS");
    }
    catch (IOException e)
    {
        throw new WebApplicationException(e);
    }
}

这是纯RESTEasy解决方案,您可以在处理请求之前将此代码放在任何位置。

我使用了tapestry-resteasy集成,并使用tapestry service advisors实现了这一点。