В этой статье мы покажем вам, как реализовать аутентификацию контейнера с помощью JAX-WS под Tomcat 6.0. Таким образом, аутентификация является декларативной, а не программной, как это - аутентификация приложения в JAX-WS . А Tomcat реализует аутентификацию контейнера через security realm .
В конце этой статьи развернутый веб-сервис аутентифицирует пользователя на основе данных аутентификации, хранящихся в файле Tomcat
conf/tomcat-users.xml
.
1. Веб-сервис
Создайте простой JAX-WS, стиль RPC.
File: 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();
}
File: 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. web.xml
Сконфигурируйте роль безопасности «оператор», сделайте URL «/user» обязательной базовой HTTP-аутентификацией. Смотрите ниже файл
web.xml
, не требующий пояснений.
File: web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,
Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app__2__3.dtd">
<web-app>
//...
<security-role>
<description>Normal operator user</description>
<role-name>operator</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>Operator Roles Security</web-resource-name>
<url-pattern>/user</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>operator</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<servlet-mapping>
<servlet-name>user</servlet-name>
<url-pattern>/user</url-pattern>
</servlet-mapping>
//...
</web-app>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
См. Эту статью - ссылка://tomcat/как-настроить-tomcat-to-support-ssl-или-https/[Сделать Tomcat для поддержки соединения SSL или https]
3. Пользователи Tomcat
Добавьте новую роль, имя пользователя и пароль в файл
$ Tomcat/conf/tomcat-users.xml
. В этом случае добавьте нового пользователя «mkyong», «123456» и прикрепите его к роли с именем «оператор».
File: $ Tomcat/conf/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="tomcat"/> <role rolename="operator"/> <user username="tomcat" password="tomcat" roles="tomcat"/> <user username="mkyong" password="123456" roles="operator"/> <user name="admin" password="admin" roles="admin,manager"/> </tomcat-users>
4. Tomcat Realm
Настройте область безопасности в файле
$ Tomcat/conf/server.xml
. В этом случае используется по умолчанию
UserDatabaseRealm
для чтения информации аутентификации в` $ Tomcat/conf/tomcat-users.xml`.
File: $ Tomcat/conf/server.xml
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml"/>
</GlobalNamingResources>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
5. Развертывание веб-службы JAX-WS на Tomcat
См. Подробное руководство по ссылке://webservices/jax-ws/deploy-jax-ws-web-services-on-tomcat/[как развернуть веб-службы JAX-WS на Tomcat].
6. Тестирование
Теперь для доступа к развернутому веб-сервису требуется аутентификация по имени и паролю, см. Рисунок: URL: http://localhost : 8080/WebServiceExample/user
Изображение://wp-content/uploads/2010/12/jaxws-container-authentication-example.png[JAXWS-контейнер-аутентификация - например, название = "JAXWS-контейнер-аутентификация - пример", ширина = 582, высота = 480]
7. Клиент WebService
Чтобы получить доступ к развернутому веб-сервису, привяжите правильное имя пользователя и пароль следующим образом:
UserProfile port = service.getPort(UserProfile.class);
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put(BindingProvider.USERNAME__PROPERTY, "mkyong");
bp.getRequestContext().put(BindingProvider.PASSWORD__PROPERTY, "123456");
File: 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
-
Примечание ** Для тех клиентов, которые указали неверное имя пользователя или пароль, Tomcat выдаст следующее исключение:
Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException:
request requires HTTP authentication: Unauthorized
Готово.
Скачать исходный код
Загрузить - ссылка://wp-content/uploads/2010/12/JAX-WS-Container-Authentication-Example.zip[JAX-WS-Container-Authentication-Example.zip](11 КБ)
Ссылка
, http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html [Tomcat realm
КАК], http://docs.sun.com/app/docs/doc/819-3669/bnccv?a=view [Example: Basic
Аутентификация с помощью JAX-WS], http://www.ryandelaplante.com/2007/06/ssl-and-http-basic-authentication-with.html [SSL
и HTTP BASIC аутентификация с помощью Glassfish и JAX-WS]
ссылка://тег/аутентификация/[аутентификация]ссылка://тег/jax-ws/[jax-ws]ссылка://тег/tomcat/[tomcat]ссылка://тег/веб-службы/[веб-службы]