11-10-2016 06:25 AM
Buenos días,
Os comento el problema que estoy teniendo. Tengo un Webscript formado por los archivos que os adjunto. Este Webscript lo tenía un una máquina con Alfresco 3.0 funcionando perfectamente. A través de la url le pasaba los parámetros que identifican una factura, se autenticaba y la mostraba directamente. Ahora he migrado Alfresco a la versión 4.2. El problema que tengo es que cuando hago la llamada me salta un popup para introducir el usuario y password y no me muestra la factura directamente, como si hiciese mal la autenticación.
Si hago la prueba con la siguiente url y un usuario me devuelve bien el ticket.
"${url.serviceContext}/api/login?u=${user}&pw=${pass}";
Pero creo que al hacer la llamada a la siguiente url está pasando mal el ticket (al hacer el substring)
"${url.serviceContext}/showContent?nFact=${nFact}&cPro=${cPro}&alf_ticket="+ticket;
¿Alguna idea de que puede estar pasando?
11-10-2016 06:58 AM
El script debería funcionar sin autenticación, no?
<authentication>none</authentication>
11-10-2016 07:14 AM
Si, cierto Angel, ahora cambiandolo por "none" me devuelve el error de autenticación
The Web Script /alfresco/service/getContent has responded with a status of 500 - Internal Error. |
500 Description: | An error inside the HTTP server which prevented it from fulfilling the request. |
Message: | 10100160 Wrapped Exception (with status template): A valid SecureContext was not provided in the RequestContext |
Exception: | net.sf.acegisecurity.AuthenticationCredentialsNotFoundException - A valid SecureContext was not provided in the RequestContext |
net.sf.acegisecurity.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:481) | |
net.sf.acegisecurity.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:359) | |
net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:77) | |
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) | |
org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:46) | |
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) | |
org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:161) | |
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) | |
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) | |
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) | |
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) | |
com.sun.proxy.$Proxy57.hasPermission(Unknown Source) | |
org.alfresco.service.cmr.repository.Path.toDisplayPath(Path.java:208) | |
org.alfresco.repo.web.scripts.RepoStore.getPath(RepoStore.java:297) | |
org.alfresco.repo.web.scripts.RepoStore.getBaseDir(RepoStore.java:262) | |
org.alfresco.repo.web.scripts.RepoStore.access$000(RepoStore.java:73) | |
org.alfresco.repo.web.scripts.RepoStore$RepoScriptContent.getPath(RepoStore.java:1070) | |
org.springframework.extensions.webscripts.ScriptProcessorRegistry.getScriptProcessor(ScriptProcessorRegistry.java:173) | |
org.springframework.extensions.webscripts.AbstractWebScript.executeScript(AbstractWebScript.java:1304) | |
org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:86) | |
org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:377) | |
org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:529) | |
org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:268) | |
org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:378) | |
org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:209) | |
org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:132) | |
javax.servlet.http.HttpServlet.service(HttpServlet.java:727) | |
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) | |
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) | |
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) | |
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) | |
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) | |
org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:61) | |
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) | |
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) | |
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) | |
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) | |
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) | |
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) | |
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) | |
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) | |
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) | |
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) | |
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) | |
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) | |
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) | |
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) | |
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) | |
java.lang.Thread.run(Thread.java:724) | |
Exception: | org.springframework.extensions.webscripts.WebScriptException - 10100160 Wrapped Exception (with status template): A valid SecureContext was not provided in the RequestContext |
org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:1067) | |
Server: | Community v4.2.0 (r63893-b12) schema 6.033 |
Time: | 10-nov-2016 12:09:24 |
Diagnostics: | Inspect Web Script (getContent.get) |
11-14-2016 12:21 PM
Hola:
Has probado a ejecutarlo en dos pasos ? Primero obteniendo el ticket y luego ejecutando el otro servicio con el ticket.
Echando un ojo a la ftl y a como lo haces, me da que el substring que estas obteniendo se esta truncando y por eso no se autentica correctamente.
Saludos.
--C.
11-14-2016 01:00 PM
Hola Cesar,
He cambiado el código para obtener el ticket con un getElementByTagName, ejecutandolo en 2 pasos jarcodeando me lo hace bien, pasandole los datos a mano. Pero cuando lo hago todo junto incluso jarcodeando el ticket me devuelve el anterior error 500. Parece que hay algún problema con el request. Pongo también el xml por si veis algo extraño. Gracias
<script type="text/javascript">
jQuery.support.cors = true;
var urlTicket = "${url.serviceContext}/api/login?u=${user}&pw=${pass}";
var ticket = "";
var request = $.get(urlTicket, function(data,status){
ticket = data.getElementsByTagName("ticket")[0].childNodes[0].nodeValue;
window.location.href = "${url.serviceContext}/showContent?nFact=${nFact}&cPro=${cPro}&alf_ticket="+ticket;
},'xml'
);
request.error(function(jqXHR, textStatus) {
if (textStatus == 'error'){
status.code = 403;
status.message = "User not found.";
status.redirect = true;
}
});
</script>
<webscript>
<shortname>Get Content</shortname>
<description>Show user specific content identified by parameters</description>
<url>/getContent?nFact={fileFact}&cPro={filePro}&user={userArgument}&pass={passArgument}</url>
<authentication>none</authentication>
<transaction>required</transaction>
</webscript>
11-14-2016 01:46 PM
Mmmm, seguramente será un problema relacionado con la petición CORS.
Cross-origin resource sharing - Wikipedia
Saludos.
--C.
11-14-2016 01:59 PM
Muchas gracias pero la verdad no entiendo como está relacionado eso con mi problema (quizá por mi nivel). El mismo webscript en Alfresco 3 funcionaba correctamente. Lo volveré a revisar de todas formas.
11-14-2016 02:14 PM
Por si sirve de algo, el tema es que si estamos autenticados en el navegador con un usuario una pantalla, (es decir con una sesión abierta) y en otra pantalla del navegador introducimos la llamada url al webscrip funciona correctamente, con lo cual supongo que está obteniendo bien el ticket que le estamos introduciendo en la línea:
ticket = data.getElementsByTagName("ticket")[0].childNodes[0].nodeValue;
window.location.href = "${url.serviceContext}/showContent?nFact=${nFact}&cPro=${cPro}&alf_ticket="+ticket;
Sin embargo si ponemos la línea mal
ticket = data.getElementsByTagName("ticket")[0].childNodes[0].nodeValue;
window.location.href = "${url.serviceContext}/showContent?nFact=${nFact}&cPro=${cPro}&alf_ticket=";
El sistema nos da un error.
Incluso si generamos un ticket a mano, y lo pegamos en la llamda a la url
ticket = data.getElementsByTagName("ticket")[0].childNodes[0].nodeValue;
window.location.href = "${url.serviceContext}/showContent?nFact=${nFact}&cPro=${cPro}&alf_ticket=TICKET_7439547375943749430e84745483739"
y no estamos logueados, la llamada falla también.
Parece cómo si en Alfresco 4.2 no podamos llamar al servicio showConent (que nosotros hemos definido) en nuestro webscript si no estamos previamente logueados en el navegador.
Alguna sugerencia con esto que acabamos de contar (por si os indica algún error que estemos cometiendo).
Gracias
Tags
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.