在localhost上的glassfish 4.0上实现ssl

时间:2014-04-14 06:05:34

标签: web-services security ssl glassfish restful-authentication

我正在使用glassfish服务器并实现可以从Web或移动客户端使用的Rest webservices。 我现在想要使用ssl证书保护这些web服务并在客户端和服务器之间创建会话。我还没有购买任何域名或服务器空间,并尝试在我的本地计算机上构建它。 如何在本地主机上为glassfish配置免费的ssl证书。

谢谢, 帕

1 个答案:

答案 0 :(得分:2)

Hotcoder24,

据我了解您的问题和评论中的问题,您希望通过HTTPS与您的服务进行通信。使用应用程序服务器时,这很容易。实际上,这是通过web.xml文件中的配置完成的。

让我们从使用maven archetype jersey-quickstart-webapp创建的简单Web应用程序开始,如Jersey tutorial中所述。

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false -DgroupId=com.example -DartifactId=simple-service-webapp -Dpackage=com.example -DarchetypeVersion=2.14

这将创建一个包含单个资源的Web应用程序,该资源可以部署到Glassfish服务器(生成war文件)。

@Path("myresource")

公共类MyResource {

/**
 * Method handling HTTP GET requests. The returned object will be sent
 * to the client as "text/plain" media type.
 *
 * @return String that will be returned as a text/plain response.
 */
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
    return "Got it!";
}

}

首先,您应该创建一个用户并使用Glassfish控制台(http://localhost:4848/)将其添加到组中。最简单的方法是使用文件领域。该过程描述为here。让我们创建一个名为“user”的用户和名为“users”的组。

如果您部署了该应用程序,则在您输入网址http://localhost:8080/simple-service-webapp/webapi/myresource时,该资源将在您的浏览器中可用。在我们在项目的xml文件中完成任何配置之前,资源是免费提供的。

现在让我们在web.xml文件中添加一些元素。

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<!--Some elements go here-->

<security-constraint>
    <web-resource-collection>
        <web-resource-name>GetIt</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>users</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>file</realm-name>
</login-config>

<security-role>
    <role-name>users</role-name>
</security-role>

我们添加了树元素:

  • security-constraint描述了一个要保护的URL模式,列出了允许访问它的角色,对你的问题最重要的是user-data-constraint元素,在我们的例子中,它会切换HTTPS。
  • login-config元素指示服务器使用最简单的经过身份验证的机制,这意味着当您尝试使用浏览器访问资源时,会显示一个提示输入登录名和密码的对话框;你的名字也在这里供奉;
  • 最后一个元素定义您使用的角色。

现在有必要将组链接到角色。这是使用特定于容器的glassfish-web.xml完成​​的。

<glassfish-web-app error-url="">
<security-role-mapping>
    <role-name>users</role-name>
    <group-name>users</group-name>
</security-role-mapping>
<!--some elements go here-->

现在,如果您将浏览器定向到http:// URL,那么您将切换到https://,如果没有带有<transport-guarantee>CONFIDENTIAL</transport-guarantee>的user-data-constraint元素,情况就不是这样。