Аутентификация контейнера с помощью JAX-WS - (версия Tomcat)

В этой статье мы покажем вам, как реализовать аутентификацию контейнера с помощью 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 КБ)

Ссылка

Аутентификация с помощью 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]ссылка://тег/веб-службы/[веб-службы]

Related