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?
El script debería funcionar sin autenticación, no?
<authentication>none</authentication>
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) |
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.
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>
Mmmm, seguramente será un problema relacionado con la petición CORS.
Cross-origin resource sharing - Wikipedia
Saludos.
--C.
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.
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
Content from pre 2016 and from language groups that have been closed.
Content is read-only.
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.