В этой статье мы покажем вам, как реализовать аутентификацию контейнера с помощью JAX-WS в Tomcat 6.0. Таким образом, аутентификация является декларативной, а не программной, как это – аутентификация приложения в JAX-WS . И Tomcat реализуют аутентификацию контейнера через область безопасности .
В конце этой статьи развернутая веб-служба будет аутентифицировать пользователя на основе данных аутентификации, хранящихся в Tomcat conf/tomcat-users.xml
файл.
1. Веб-сервис
Создайте простой стиль JAX-WS, RPC.
Файл: UserProfile.java
package com.mkyong.ws; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; //Service Endpoint Interface @WebService @SOAPBinding(style = Style.RPC) public interface UserProfile{ @WebMethod String getUserName(); }
Файл: UserProfileImpl.java
package com.mkyong.ws; import javax.jws.WebService; //Service Implementation Bean @WebService(endpointInterface = "com.mkyong.ws.UserProfile") public class UserProfileImpl implements UserProfile{ @Override public String getUserName() { return "getUserName() : returned value"; } }
2. Файл: UserProfileImpl.java
Настройте роль безопасности “оператор”, сделайте URL-адрес “/пользователь” обязательным для базовой аутентификации http. Смотрите ниже web.xml
файл, не требующий пояснений.
Файл: web.xml
//... Normal operator user operator Operator Roles Security /user operator NONE BASIC //... user /user
CONFIDENTIAL
Смотрите эту статью – Сделайте Tomcat для поддержки SSL или https-соединения
3. Пользователи Tomcat
Добавьте новую роль, имя пользователя и пароль в $Tomcat/conf/tomcat-users.xml
файл. В этом случае добавьте нового пользователя “mkyong”, “123456” и прикрепите его к роли с именем “оператор”.
Файл: $Tomcat/conf/tomcat-users.xml
4. Царство котов
Настройте область безопасности в $Tomcat/conf/server.xml
файл. В этом случае используется значение по умолчанию UserDatabaseRealm
для чтения информации об аутентификации в $Tomcat/conf/tomcat-users.xml
.
Файл: $Tomcat/conf/server.xml
5. Развертывание веб-службы JAX-WS на Tomcat
Смотрите это подробное руководство по как развернуть веб-службы JAX-WS на Tomcat .
6. Тестирование
Теперь для любого доступа к развернутой веб-службе требуется аутентификация по имени пользователя и паролю, см. Рисунок: URL-АДРЕС: http://localhost:8080/WebServiceExample/пользователь
7. Клиент веб-сервиса
Чтобы получить доступ к развернутой веб-службе, привяжите правильное имя пользователя и пароль следующим образом:
UserProfile port = service.getPort(UserProfile.class); BindingProvider bp = (BindingProvider) port; bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "mkyong"); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "123456");
Файл: WsClient.java
package com.mkyong.client; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.ws.BindingProvider; import javax.xml.ws.Service; import com.mkyong.ws.UserProfile; public class WsClient{ //can't parse wsdl "http://localhost:8080/WebServiceExample/user.wsdl" directly //save it as local file, and parse it private static final String WS_URL = "file:c://user.wsdl"; public static void main(String[] args) throws Exception { URL url = new URL(WS_URL); QName qname = new QName("http://ws.mkyong.com/", "UserProfileImplService"); Service service = Service.create(url, qname); UserProfile port = service.getPort(UserProfile.class); //add username and password for container authentication BindingProvider bp = (BindingProvider) port; bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "mkyong"); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "123456"); System.out.println(port.getUserName()); } }
выход
getUserName() : returned value
Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException: request requires HTTP authentication: Unauthorized
Сделано.
Скачать Исходный Код
Ссылка
- Царство котов КАК ТО
- Пример: Обычная аутентификация с помощью JAX-WS
- БАЗОВАЯ аутентификация SSL и HTTP с помощью Glassfish и JAX-WS
Оригинал: “https://mkyong.com/webservices/jax-ws/container-authentication-with-jax-ws-tomcat/”