Inicio > ADF / Java > Error “401 Unauthorized” al consumir un servicio web desde un DataControl en ADF 11g

Error “401 Unauthorized” al consumir un servicio web desde un DataControl en ADF 11g

Durante el desarrollo de una aplicación ADF me he encontrado con la necesidad de consumir un servicio web a través de un DataControl. El servicio tenía autenticación http básica, de modo que a mi DataControl le he añadido las credenciales. Una vez hecho esto, desplegué la aplicación en el Weblogic local y funcionó a la perfección.

Después, desplegué la aplicación en el servidor Weblogic del entorno de test y al ir a probar la página que hacía la llamada, me encontré con que se producía el error “javax.xml.soap.SOAPException: Bad response: 401 Unauthorized”.

Featured image

A continuación, os explico los pasos que hay que realizar para solucionar este problema.

En primer lugar es necesario que el DataControl sobrescriba las propiedades de seguridad que por defecto asigna Weblogic. Esto se realiza de la siguiente manera:

1. Seleccionar el archivo “DataControls.dcx”

Selecionar "DataControls.dcx"

2. En la ventana “Structure”, seleccionar el DataControl y mostrar el menú emergente. Seleccionar la opción “Define Web Service Security…”.

Definir seguridad

3. En la ventana emergente que se abre, debemos escoger la política de seguridad que hay que aplicar y a continuación sobrescribir sus propiedades. En el caso de usar autenticación HTTP básica hay que seleccionar la política “oracle/wss_http_token_client_policy”.

Seleccionar política de seguridad

 

4. Una vez seleccionada la política ejecutamos la opción “Override Properties…”. Se abre una nueva ventana en la que podemos definir la credencial a usar. Como no habrá ninguna, debemos crearla: click en “New key…” y entrar los datos de usuario, password y clave que identifica la nueva entrada (ojo: hay que apuntarse esta clave, la volveremos a usar más adelante).

Sobreescribir propiedad

Añadir credencial

5. Aceptar todos los cambios.

En este punto ya hemos definido qué seguridad usará el DataControl y qué credencial va a usar. De todos modos, en este momento, si desplegamos la aplicación nos seguirá dando error. El motivo es que el dominio de Weblogic necesita explícitamente que se le permita a las aplicaciones sobrescribir las credenciales. Para poder dar este permiso hay que modificar el script “setDomainEnv.sh” del dominio. Hay que añadir la siguiente propiedad:

<pre>EXTRA_JAVA_PROPERTIES="${EXTRA_JAVA_PROPERTIES} -Djps.app.credential.overwrite.allowed=true"

export EXTRA_JAVA_PROPERTIES

(nota: el archivo “setDomainEnv.sh” se encuentra en “/ORACLE_HOME/ user_projects/domains/DOMINO/bin”).

Tras modificar el script hay que reiniciar el domino para que el cambio sea efectivo. Llegados a este punto la aplicación aún no va a poder ejecutar el servicio: el error que da ya no es “401 Unauthorized” sino que ahora se queja que no encuentra la credencial en el almacén de llaves. Sólo nos queda añadir al almacén la nueva credencial (la que hemos definido anteriormente en la seguridad de nuestro DataControl).

Para añadirla lo haremos a través de “Fusion Middleware Control” (“Enterprise Manager”). Hacemos login en la consola de FMC (http://servidor:puerto administración/em). Seleccionamos el dominio en el que queremos añadir la credencial, mostramos el menú emergente (click botón derecho del mouse sobre el nombre del dominio) y seleccionamos la opción “Seguridad > Credenciales”.

Seguridad > Credenciales

Se abre una nueva página en la que se muestran los almacenes de credenciales disponibles. En el caso que estamos tratando vamos a añadir la nueva credencial en el almacén por defecto, “oracle.wsm.security”: seleccionamos el almácen y clicamos en “Crear Clave”.

Página de credenciales

Se abre un popup en el que hemos de introducir los datos de la credencial (usario y password) y la clave que la identifica (campo “Clave”). En la clave hay que poner el mismo nombre que el que le hemos puesto en la configuración de seguridad del DataControl.

Nueva clave

Ahora sí, una vez introducida la credencial en el almacén, la aplicación ya va a ser capaz de acceder al servicio web securizado.

Categorías:ADF / Java Etiquetas: , ,
  1. fernando jimenez
    mayo 30, 2015 en 16:41

    hola xavier tengo el mismo problema al consumir una webservice y no lo he podido resolver me gustaria sabr como llego al menu que muestras. tambien tengo el errror 401

    • Xavier Ribas
      junio 1, 2015 en 07:45

      Hola Fernando,

      si te refieres al menú emergente, tienes que entrar en el “Enterprise Manager” de tu instalación. Una vez allí, buscar la carpeta “Dominios de Weblogic” y pulsas con el botón derecho sobre el dominio en el que tienes desplegada la aplicación. Ahora deberías ver el menú.

      Saludos.

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: