|  | [//]: # " Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved. " | 
|  | [//]: # " " | 
|  | [//]: # " This program and the accompanying materials are made available under the " | 
|  | [//]: # " terms of the Eclipse Distribution License v. 1.0, which is available at " | 
|  | [//]: # " http://www.eclipse.org/org/documents/edl-v10.php. " | 
|  | [//]: # " " | 
|  | [//]: # " SPDX-License-Identifier: BSD-3-Clause " | 
|  |  | 
|  | HTTPS Server Example - GlassFish | 
|  | ================================ | 
|  |  | 
|  | This example demonstrates how to develop secure RESTful "Hello world" | 
|  | web service with a Servlet 2.5 container. | 
|  |  | 
|  | Contents | 
|  | -------- | 
|  |  | 
|  | The example consists of just one Java class: | 
|  |  | 
|  | `org.glassfish.jersey.examples.https.glassfish.resources.HelloWorldResource` | 
|  |  | 
|  | A resource class that produces a textual response to an HTTP GET request. | 
|  |  | 
|  | The mapping of the URI path space is presented in the following table: | 
|  |  | 
|  | URI path            | Resource class       | HTTP methods | 
|  | ------------------- | -------------------- | -------------- | 
|  | **_/helloworld_**   | HelloWorldResource   | GET | 
|  |  | 
|  | Running the Example | 
|  | ------------------- | 
|  |  | 
|  | Run the example as follows: | 
|  |  | 
|  | Create war package | 
|  |  | 
|  | >     mvn clean package | 
|  |  | 
|  | Setup GlassFish 6.0 (installed at `AS_HOME=<install_dir>/glassfish4`): | 
|  |  | 
|  | Add new security realm called "`myRealm`" | 
|  | -   Start GlassFish using asadmin `$AS_HOME/bin/asadmin start-domain` | 
|  | -   Access Admin console, assuming the use of default admin port, at | 
|  | <http://localhost:4848> | 
|  | -   Navigate in Admin console to: | 
|  | `Configurations -> server-config -> Security -> Realms`, click on | 
|  | "`New...`" | 
|  | -   Create user and set password for user `myUser` (click on "`myRealm`" | 
|  | -> "`Manage Users`" -> "`New...`"); | 
|  | -   **Ensure** "`User ID:`" set to "`myUser`" **and** | 
|  | "`Group List:`" set to "`Users`" | 
|  | -   Enter password **`myPass`** in "`New Password:`" and | 
|  | "`Confirm New Password:`" text fields | 
|  | -   Add one other user name `joeUser` (click on "`myRealm`" -> | 
|  | "`Manage Users`" -> "`New...`"); | 
|  | -   **Ensure** "`User ID:`" set to "`joeUser`" **and** | 
|  | "`Group List:`" set to "`Users`" | 
|  | -   Enter password **`joePass`** in "`New Password:`" and | 
|  | "`Confirm New Password:`" text fields | 
|  |  | 
|  | Check `web.xml` and `sun-web.xml` to understand how role mappings are | 
|  | configured. [This | 
|  | blog](http://blogs.oracle.com/bobby/entry/simplified_security_role_mapping) | 
|  | is also helpful in helping to clarify role mappings. | 
|  | Deploy `https-server-glassfish.war` as a Web Application | 
|  | -   Admin console: select `Applications`, click on "`Deploy...`". Select | 
|  | file `./target/https-server-glassfish.war` | 
|  | -   or you can use command line: | 
|  | `$AS_HOME/bin/asadmin deploy ./target/https-server-glassfish.war` | 
|  |  | 
|  | From a web browser, visit: | 
|  |  | 
|  | -   <https://localhost:8181/https-server-glassfish-webapp/helloworld> | 
|  | -   Enter either Username `myUser` and Password `myPass` or, Username  `joeUser` and Password `joePass` | 
|  | -   If entered Username `myUser` and Password `myPass`, verify that | 
|  | **expected output**: `Sending "Hello World" to user "myUser"` was displayed | 
|  | -   If entered Username `joeUser` and Password `joePass`, verify that | 
|  | **expected output**: `Sending "Hello World" to user "joeUser"` was displayed | 
|  |  | 
|  | Running the Negative Example | 
|  | ---------------------------- | 
|  |  | 
|  | Run the example as follows: | 
|  |  | 
|  | 1.  Create war package | 
|  |  | 
|  | >     mvn clean package | 
|  |  | 
|  | 2.  setup GlassFish 6.0 (installed at | 
|  | `AS_HOME=<install_dir>/glassfish6`): | 
|  |  | 
|  | -   Follow the steps described in the "**setup GlassFish 6.0**" | 
|  | section from the previous chapter "**Running the Example**" but | 
|  | instead of adding the user "`joeUser`" to the "`Group List:`" of | 
|  | "`Users`" set "`Group List:`" for this user to "`OtherUsers`" | 
|  |  | 
|  | 3.  From a web browser, visit: | 
|  |  | 
|  | -   <https://localhost:8181/https-server-glassfish-webapp/helloworld> | 
|  | -   Enter Username `joeUser` and Password `joePass`, verify that **expected output** | 
|  | looks like: `HTTP Status 403 - Access to the requested resource has been denied` |