Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

Section


Column
width70%

  Description de la problématique


Avertissement

Vous recevez souvent l'erreur 

Invalid location URI received from client

[...] 

Illegal character in fragment at index 50: https://calcium.univ.fr/connect/#!planning#!planning

Développer
titleLog de l'erreur


Bloc de code
java.lang.RuntimeException: Invalid location URI received from client
    at com.vaadin.server.Page.init(Page.java:749)
    at com.vaadin.ui.UI.doInit(UI.java:738)
    at com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:218)
    at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:76)
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1602)
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:445)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at fr.univlorraine.tools.logback.UserMdcServletFilter.doFilter(UserMdcServletFilter.java:49)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
    at org.springframework.security.web.authentication.switchuser.SwitchUserFilter.doFilter(SwitchUserFilter.java:198)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at fr.univlorraine.calcium2k16.security.TokenFilter.doFilter(TokenFilter.java:48)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:97)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:525)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1627)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.net.URISyntaxException: Illegal character in fragment at index 50: https://calcium2.univ-angers.fr/connect/#!planning#!planning
    at java.base/java.net.URI$Parser.fail(URI.java:2913)
    at java.base/java.net.URI$Parser.checkChars(URI.java:3084)
    at java.base/java.net.URI$Parser.parse(URI.java:3128)
    at java.base/java.net.URI.<init>(URI.java:600)
    at com.vaadin.server.Page.init(Page.java:747)
    ... 72 common frames omitted



Résolution

Astuce

C'est une erreur provenant du CAS.

Nous vous invitons à suivre la démarche présenter ici : Bugs / problèmes rencontrés CAS#Probl%C3%A8meredirectionCAS(urlavecfragment)

Il se peut que vous n'ayez pas accès à cette doc, alors voici :

Ce problème survient pour toute URL ou en terminaison de celle-ci est présent le caractère #  (anchor)

Ce bug est présent dans le fichier cas.js, plus précisément dans la fonction preserveAnchorTagOnForm()


Il n'est pas possible de la modifier dans le fichier des sources du cas-overlay-template, car celui-ci est téléchargé sur les dépôts lors de la compilation du projet.

(avertissement) Explication du bug  :

Bloc de code
languagejs
title~/webapps/cas/WEB-INF/classes/static/js/cas.js
# J'ai mis volontairement des commentaires pour expliquer les différentes valeurs des variables retournées
function preserveAnchorTagOnForm() {
    $('#fm1').submit(function () {
        var location = self.document.location;
        var hash = decodeURIComponent(location.hash);
 
        if (hash != undefined && hash != '' && hash.indexOf('#') === -1) {
            hash = '#' + hash;
            # 1er Point d'arrêt
            # hash = "#!opiView"
        }
 
        var action = $('#fm1').attr('action');
        if (action == undefined) {
            action = location.href;
        } else {
            var qidx = location.href.indexOf('?');
            if (qidx != -1) {
                var queryParams = location.href.substring(qidx);
                # 2ème Point d'arrêt
                # queryParams = "https://auth.univ-lorraine.fr/login?service=http%3A%2F%2Fopi-test.univ-lorraine.fr%2Fj_spring_cas_security_check#!opiView"
                action += queryParams;
            }
        }
        action += hash;
        # 3ième Point d'arrêt
        # action = "https://auth.univ-lorraine.fr/login?service=http%3A%2F%2Fopi-test.univ-lorraine.fr%2Fj_spring_cas_security_check#!opiView#!opiView"
        $('#fm1').attr('action', action);
 
    });
}


(coche) Résolution du problème :

Nous avons du réécrire la fonction complète, pour ce faire nous l'avons intégré dans le fichier cas.js, présent dans le dossier du theme UL.

La définition de cette fonction dans le fichier JS de notre thème surcharge la fonction implémentée de base, c'est celle-ci qui est appelée à chaque validation de formulaire.

Bloc de code
languagejs
title~/src/cas-overlay-template/src/main/resources/static/themes/ul/js/cas.js
linenumberstrue
# J'ai mis volontairement des commentaires pour expliquer les différentes valeurs des variables retournées
 
function preserveAnchorTagOnForm() {
    $('#fm1').submit(function () {
        var location = self.document.location;
        var hash = decodeURIComponent(location.hash);
 
        if (hash != undefined && hash != '' && hash.indexOf('#') === -1) {
            hash = '#' + hash;
            # 1er Point d'arrêt
            # hash = "#!opiView"
        }
 
        var action = $('#fm1').attr('action');
        if (action == undefined) {
            action = location.href;
        } else {
            var queryParams = "";
            var qidx = location.href.indexOf('?');
            if (qidx != -1) {
                var queryParams = location.href.substring(qidx);
                # 2ème Point d'arrêt
                # queryParams = "?service=http%3A%2F%2Fopi-test.univ-lorraine.fr%2Fj_spring_cas_security_check#!opiView"
            }
            var hidx = queryParams.indexOf('#');
            if (hidx != -1) {
                var queryParams = queryParams.substring(0,hidx);
                # 3ème Point d'arrêt
                # queryParams = "?service=http%3A%2F%2Fopi-test.univ-lorraine.fr%2Fj_spring_cas_security_check"
            }
 
            action += queryParams;
            # 4ième Point d'arrêt
            # action = "https://auth.univ-lorraine.fr/login?service=http%3A%2F%2Fopi-test.univ-lorraine.fr%2Fj_spring_cas_security_check"
         
        }
        action += hash;
        # 5ième Point d'arrêt
        # action = "https://auth.univ-lorraine.fr/login?service=http%3A%2F%2Fopi-test.univ-lorraine.fr%2Fj_spring_cas_security_check#!opiView"
        $('#fm1').attr('action', action);
 
    });
}
Info
On aurait pu commenté la ligne 37 correspondant à "action +=hash;" qui aurait corrigé notre bug avec les URLs contenant #, mais nous ne voulions pas induire de comportement différent avec d'autres URLs





Column


Volet
titleDans cette page

Sommaire
 


Volet
titleEn savoir plus

Affichage enfants



...