Advertencia |
---|
Las normas expuestas son de obligado cumplimiento. La STIC podrá estudiar los casos excepcionales los cuales serán gestionados a través de los responsables del proyecto correspondiente y autorizados por el Área de Gobernanza de la STIC. Asimismo cualquier aspecto no recogido en estas normas deberá regirse en primera instancia por las guías técnicas correspondientes al esquema nacional de seguridad y esquema nacional de interoperabilidad según correspondencia y en su defecto a los marcos normativos y de desarrollo software establecidos por la Junta de Andalucía, debiendo ser puesto de manifiesto ante la STIC. La STIC se reserva el derecho a la modificación de la norma sin previo aviso, tras lo cual, notificará del cambio a los actores implicados para su adopción inmediata según la planificación de cada proyecto. En el caso de que algún actor considere conveniente y/o necesario el incumplimiento de alguna de las normas y/o recomendaciones, deberá aportar previamente la correspondiente justificación fehaciente documentada de la solución alternativa propuesta, así como toda aquella documentación que le sea requerida por la STIC para proceder a su validación técnica. Contacto Arquitectura: l-arquitectura.stic@juntadeandalucia.es |
Los cambios en la normativa vendrán acompañados de un registro de las modificaciones. De este modo se podrá realizar un seguimiento y consultar su evolución. Ordenándose de mas recientes a menos recientes, prestando especial cuidado a las cabezeras de la tablas dónde se indican las fechas de entrada en vigor y versión.
Expandir | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||
|
Esta librería permitirá de hacer uso de la Api proporcionada por Maco y tener acceso a utilidades relacionadas con la operativa con Maco.
Puede encontrarse un ejemplo de integración con maco mediante esta librería en el Arquetipo "javaee7-sample", en el branch "MacoIntegration".
Actualmente la librería tiene las siguiente funcionalidades:
De cara a priorizar futuras funcionalidades, si algún proveedor tiene la necesidad de alguna funcionalidad adicional se deberá de comunicar a l-arquitectura.stic.sspa@juntadeandalucia.es
MacoApiClient | sasutils-test | sasutils-xml | sasutils-parse | sasutils-file |
---|---|---|---|---|
2.1.0 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.2 |
2.0.1 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.2 |
2.0.0 | 2.0.2 | 2.0.2 | 2.0.2 | 2.0.2 |
1.8.0.2 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 |
1.8.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 |
1.7.2.2 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 |
1.7.2.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 |
1.7.1.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 |
1.7.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 |
1.6.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 |
1.5.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 |
1.4.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 |
1.3.1.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 |
1.3.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 | 1.0.0.1 |
1.2.1.1 | - | - | - | - |
1.2.0.1 | - | - | - | - |
1.1.0.1 | - | - | - | - |
1.0.0.1 | - | - | - | - |
v2.0.1
Actualización del método serviceAuthorization (Eliminar comprobación de los servicios asociados) en la clase BaseMacoAuthentication.
v2.0.0
Actualización de dependencias.
v1.8.0.2
v1.8.0.1
v1.7.2.2
v1.7.1.1
v1.7.0.1
v1.6.0.1
v1.5.0.1
v1.4.0.1
v1.3.1.1
v1.3.0.1
v1.2.1.1
v1.2.0.1
MacoProfessionalManager
para la gestión de operaciones referentes a los profesionalesMacoOperatorManager
. Todas las referencias de `User' han sido sustituidas por `Operator'.MacoOperatorManager
, ahora aceptan un objeto dto con los parámetros que configuran la búsqueda.ExpiredTicketValidation
), para que por defecto use la fecha actual como referencia a la hora de validar los tickets, si no se le especifica ninguna en la configuración.Para incluir la librería en un proyecto Maven es necesario realizar los siguientes pasos:
Especificando el repositorio en la configuración global.
Bloque de código |
---|
<project> ... <repositories> <repository> <id>Repo_SAS</id> <name>Repo_SAS</name> <url>http://java.lib.repository.alm.sas.junta-andalucia.es</url> </repository> </repositories> ... </project> |
Otra opción es especificar un perfil en concreto en ```${user.home}/.m2/settings.xml```
Bloque de código |
---|
<settings> ... <profiles> ... <profile> <id>myprofile</id> <repositories> <repository> <id>Repo_SAS</id> <name>Repo_SAS</name> <url>http://java.lib.repository.alm.sas.junta-andalucia.es</url> </repository> </repositories> </profile> ... </profiles> <activeProfiles> <activeProfile>myprofile</activeProfile> </activeProfiles> ... </settings> |
Hay que tener en cuenta, que se deberá de tener activo el perfil.
Especificar la dependencia en el POM del proyecto que requiere la funcionalidad.
Bloque de código |
---|
Con CDI:(A partir de la version 1.4.0.1 <dependency> <groupId>es.ja.csalud.sas.componentescomunes.macoapiclient</groupId> <artifactId>macoApiClient-jee</artifactId> <version>x.x.x.x</version> </dependency> |
Bloque de código |
---|
Sin CDI: <dependency> <groupId>es.ja.csalud.sas.componentescomunes.macoapiclient</groupId> <artifactId>macoApiClient</artifactId> <version>x.x.x.x</version> </dependency> |
Puede ser usada mediante CDI o de forma tradicional creando los objetos requeridos por cada constructor. Con CDI es indispensable especificar como se producirán las inyecciones de los objetos de configuración.
Para que la libreria se autoconfigure mediante la libreria sasconfiguration, se tendran que realizar las siguientes acciones:
Añadir la siguiente dependencia:
Bloque de código |
---|
<dependency> <groupId>es.ja.csalud.sas.componentescomunes.macoapiclient</groupId> <artifactId>macoApiClient-config</artifactId> <version>x.x.x.x</version> </dependency> |
es.ja.csalud.sas.componentescomunes.macoapiclient.config.url | Url de maco |
---|---|
es.ja.csalud.sas.componentescomunes.macoapiclient.config.modulecode | Codigo del modulo del aplicativo |
es.ja.csalud.sas.componentescomunes.macoapiclient.config.macocharset | Codificacion de maco (opcional) |
es.ja.csalud.sas.componentescomunes.macoapiclient.config.ticket.ttl | Tiempo de vida del ticket (en milisegundos) |
es.ja.csalud.sas.componentescomunes.macoapiclient.config.ticket.futuretolerance | Tolerancia a fecha futura del ticket (en milisegundos) |
es.ja.csalud.sas.componentescomunes.macoapiclient.config.ticket.permissions | Permisos que se validaran en todos los tickets |
es.ja.csalud.sas.componentescomunes.macoapiclient.config.ticket.rsakey | Clave publica de Maco en formato XML |
es.ja.csalud.sas.componentescomunes.macoapiclient.config.ticket.ticketValidations | Tipos de validaciones que se realizaran (FUTURE,EXPIRED,PERMISSION,SIGNATURE) |
Estos parametros se definiran usando la libreria sasconfiguration.(https://ws001.sspa.juntadeandalucia.es/unifica/web/gobernanza/sasconfiguration)
De forma alternativa se podran definir manualmente estas configuraciones.
Actualmente existen dos objetos de configuración:
MacoApiConfig
gestiona la configuración general de la librería. Ejemplo:
Bloque de código | ||
---|---|---|
| ||
// Esta implementación presupone que el endpoint a consultar se encuentran en el path por defecto "/wsCentralizada" relativo a la url que se especifica en el constructor de MacoApiConfig. // Dicha información puede no ser precisa en el momento de la configuración de su solución por lo que le recomendamos que consulte con la Oficina Técnica de Interoperabilidad la configuración adecuada. // Consulte la sección "Configuración detallada de los endpoints de consulta" en este documento para customizar la configuración. ... @Produces public MacoApiConfig getMacoApiConfig() { final MacoApiConfig macoApiConfig = new BaseMacoApiConfig("http://ws-maco-pre.diraya-test.sspa.junta-andalucia.es/"); macoApiConfig.setModuleCode("338"); return macoApiConfig; } ... |
TicketValidatorConfig
gestiona la configuración para la validación de tickets. Ejemplo:
Bloque de código | ||
---|---|---|
| ||
... @Produces public TicketValidatorConfig getTicketValidatorConfig() { TicketValidatorConfig config = new TicketValidatorConfig(); config.setRSAkey(xmlKey); config.setReferenceDate(new Date()); config.setFutureTicketToleranceMillis(-1); config.setTicketTtlMillis(24 * 60 * 60 * 1000); config.setTicketValidations(EnumSet.of(TicketValidationType.SIGNATURE, TicketValidationType.EXPIRED)); return config; } ... |
Estos objetos serán usados por defecto en todas las inyecciones de la librería.
La estrategia de servicios, puede presentar modificaciones en la configuración de los endpoints que su solución puede consumir en cada momento. MacoApiClient, provee una configuración rápida por defecto que puede no estar actualizada respecto al direccionamiento en cada momento.
Para articular el direccionamiento de dichos servicios correctamente puede configurar MacoApiClient aprovisionando un EnumMap con el direccionamiento detallado hacia en endpoint.
Bloque de código | ||||||
---|---|---|---|---|---|---|
| ||||||
@Produces public MacoApiConfig getMacoApiConfig() { // URL BASE DEL ENDPOINT DE MACO String urlMaco="https://servicios.pre.sas.junta-andalucia.es/" // SUBPATH DEL CONTEXTO DE MACO String pathUrl="/maco"; // DEFINICION DE LOS ENDPOINTS ESPECIFICOS PARA LOS SERVICIOS DE VALIDACIÓN String macoValidationEndpoint="/wsValidacion.asmx?wsdl"; // DEFINICIONES DE LOS ENDPOINTS ESPECIFICOS PARA LOS SERVICIOS DE OPERADOR String macoOperadoresEndpoint="/wsOperador.asmx?wsdl"; // DEFINICIONES DE LOS ENDPOINTS ESPECIFICOS PARA LOS SERVICIOS DE PROFESIONAL String macoProfesionalesEndpoint="/wsProfesional.asmx?wsdl"; // SOBRESCRITURA DEL ENUMAP EnumMap<MacoEndPointType,String> oVal=new EnumMap<>(MacoEndPointType.class); oVal.put(MacoEndPointType.VALIDACION, pathUrl+macoValidationEndpoint); oVal.put(MacoEndPointType.OPERADOR, pathUrl+macoOperadoresEndpoint); oVal.put(MacoEndPointType.PROFESIONAL, pathUrl+macoProfesionalesEndpoint); ...... // Instanciado de la configuración de Maco con el constructor adicional que permite el mapping customizado final MacoApiConfig macoApiConfig = new BaseMacoApiConfig(urlMaco,oVal); macoApiConfig.setModuleCode("338"); return macoApiConfig; } |
Para reapuntar los servicios por completo a las urls HTTPS de Maco se debe montar un objeto EnumMap<MacoEndPointtype,String> que representaría el path a los servicios, donde MacoEndPointType es un enumerado público para cada dominio de operación del servicio web (validación,operadores,profesionales), y el string identifica el path adicional hasta el endpoint que se concatenará a la url definida en el constructor.
A modo de ejemplo, la conexión a los servicios de Maco en PRE quedaría así.
Bloque de código | ||||||
---|---|---|---|---|---|---|
| ||||||
private String urlMaco="https://servicios.pre.sas.junta-andalucia.es/" private String pathUrl="/maco"; private String macoValidationEndpoint="/wsValidacion.asmx?wsdl"; private String macoOperadoresEndpoint="/wsOperador.asmx?wsdl"; private String macoProfesionalesEndpoint="/wsProfesional.asmx?wsdl"; EnumMap<MacoEndPointType,String> oVal=new EnumMap<>(MacoEndPointType.class); oVal.put(MacoEndPointType.VALIDACION, pathUrl+macoValidationEndpoint); oVal.put(MacoEndPointType.OPERADOR, pathUrl+macoOperadoresEndpoint); oVal.put(MacoEndPointType.PROFESIONAL, pathUrl+macoProfesionalesEndpoint); ...... #Instanciado de la configuración de Maco con el constructor adicional que permite el mapping customizado MacoApiConfig macoApiConfig = new BaseMacoApiConfig(urlMaco,oVal); |
Los certificados https serán gestionados por la JVM, puede consultar más información al respecto en "
"Básicamente es ejecutar:keytool -import -alias example -keystore "C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts" -file example.cer
sustituyendo el alias, ruta del cacerts de java y ruta del fichero del certificado .cer por tus datos.
Para poder realizar la autenticación y autorización con Maco se deberá de hacer uso de la clase MacoAuthentication
Mediante el uso del método .loginAuthentication()
que devuelve un objeto MacoUser
, se podrá realizar la autenticación con Maco.
Si la autenticación no se ha podido realizar con existo se lanzara una excepción de tipo MacoException
.
Ejemplo:
Bloque de código | ||
---|---|---|
| ||
... @Inject MacoAuthentication macoAuthentication; public MacoUser login(String username, String password) { return macoAuthentication.loginAuthentication(username, password); } ... |
Para realizar la comprobación de autorización de un módulo concreto con Maco se deberá de hacer uso del método .serviceAuthorization()
.
Si la autorización no se ha podido realizar con existo se lanzara una excepción de tipo MacoException
.
Ejemplo:
Bloque de código | ||
---|---|---|
| ||
... @Inject MacoAuthentication macoAuthentication; public boolean autorizarServicio(MacoUser user, String requestedService) { return macoAuthentication.serviceAuthorization(user, requestedService); } ... |
Para poder buscar operadores en maco se deberá de hacer uso de la función findOperator
(para un solo resultado) o findOperators
(para múltiples resultados). Los campos que pueden ser usados en el dto para la búsqueda son:
Ejemplo:
Bloque de código | ||
---|---|---|
| ||
... @Inject MacoOperatorManager macoOperatorManager; //busca un usuario por su login public MacoUser BuscarUsuarioPorLogin(String login) { QuerysUserSearchDto querysUserSearchDto= new QuerysUserSearchDto(); querysUserSearchDto.setPageNumber(1); querysUserSearchDto.setUsersPerPage(1); querysUserSearchDto.setLogin(login); return macoOperatorManager.findOperator(usuarioQueRealizaLaPeticion, querysUserSearchDto); } //Permite la búsqueda por nombre, devuelve una lista de usuarios public List<MacoUser> BuscarUsuariosPorNombre(String name) { QuerysUserSearchDto querysUserSearchDto= new QuerysUserSearchDto(); querysUserSearchDto.setPageNumber(1); querysUserSearchDto.setUsersPerPage(10); querysUserSearchDto.setName(name); return macoOperatorManager.findOperators(usuarioQueRealizaLaPeticion, querysUserSearchDto); // se recomienda el uso de la version paginada de este método. } ... |
Para realizar un cambio de contraseña de un usuario en maco se deberá de hacer uso de la función changeUserPassword
Bloque de código | ||
---|---|---|
| ||
... @Inject MacoOperatorManager macoOperatorManager; //realiza un cambio de contraseña public MacoUser CambiarContraseña(MacoUser user, String password) { String hashpass= MacoUtil.MD5(password); //la manera de generar una contraseña que acepte MACO puede variar y debe de ser consultada en la documentación de MACO. return macoOperatorManager.changeUserPassword(user, hashpass); } ... |
Para poder buscar profesionales en maco se deberá de hacer uso de la función findProfessional
(para un solo resultado) o findProfessionals
(para múltiples resultados) de la misma manera que se realiza con los Operadores. Los campos que adicionalmente a los descritos en Operador que podrán ser usados son los siguientes:
La configuración especifica de los parametros la define la Oficina de Interoperabilidad por lo que sera necesario contactar con ellos para poder usar la validacion.
Si no se especificó en la configuracion una fecha de referencia se usara por defecto la fecha del sistema.
Para poder configurar unos parametros de forma global para estas validaciones se tendra que configurar un producer de TicketValidatorConfig
para poder especificar como se realizara la validacion. Todo lo que se configure en el producer seran validaciones globales y se aplicaran a todas las llamadas de isTicketValid, de esta manera se podra injectar la configuracion del validador en cualquier servicio.
IMPORTANTE: La clase TicketValidator no es ThreadSafe por lo que debe ser instanciada en cada uso, con la configuracion que se requiera.
Bloque de código | ||
---|---|---|
| ||
new TicketValidator(ticketValidatorConfig) |
Si se quiere validar un ticket + permisos concretos se realizará pasandole la lista de permisos a validar en la llamada isTicketValid. Por ejemplo:
Bloque de código | ||
---|---|---|
| ||
List<String> permissions = Arrays.asList("CUSTOMPERMISSION", "CUSTOMPERMISSION2"); return new TicketValidator(ticketValidatorConfig).isTicketValid(ticket, permissions) |
Si solo se quiere validar los valores por defecto(configurados en el Producer) no sera necesario pasarle la lista de permisos:
Bloque de código | ||
---|---|---|
| ||
@Inject TicketValidatorConfig ticketValidatorConfig ; private boolean validate(String ticket, String signature) throws InvalidTicket { return new TicketValidator(ticketValidatorConfig).isTicketValid(ticket, signature); } |