2016-09-21 1 views
0

Ich arbeite mit einer JHipster-Anwendung (generiert mit v3.4.2) und erhalte gelegentlich einen Server 500-Fehler: "Cannot change session ID. There is no session associated with this request."
Die Anwendung ist für die Verwendung von OAuth 2.0 für Sicherheit konfiguriert, und die Sitzungserstellungsrichtlinie ist auf sessionCreationPolicy(SessionCreationPolicy.STATELESS) festgelegt. Der Stacktrace durchläuft meinen Anwendungscode überhaupt nicht, soweit ich das beurteilen kann.

Meine Frage:JHipster 500-Fehler: "Sitzungs-ID kann nicht geändert werden. Dieser Anfrage ist keine Sitzung zugeordnet."

  • Wie mache ich es so, dass meine Anwendung versucht nicht, die Session-ID zu ändern, wenn es um STATELESS konfiguriert ist?
  • Wie kann ich diesen Fehler verhindern?

Hier ist meine .yo-rc.json Datei:

{ 
    "generator-jhipster": { 
    "jhipsterVersion": "3.4.2", 
    "baseName": "xxx", 
    "packageName": "xx.xx.xxx", 
    "packageFolder": "xx/xx/xxx", 
    "serverPort": "8080", 
    "authenticationType": "oauth2", 
    "hibernateCache": "hazelcast", 
    "clusteredHttpSession": "hazelcast", 
    "websocket": "no", 
    "databaseType": "sql", 
    "devDatabaseType": "h2Disk", 
    "prodDatabaseType": "mariadb", 
    "searchEngine": "elasticsearch", 
    "buildTool": "gradle", 
    "useSass": true, 
    "applicationType": "monolith", 
    "testFrameworks": [ 
     "gatling", 
     "cucumber", 
     "protractor" 
    ], 
    "jhiPrefix": "jhi", 
    "enableTranslation": true, 
    "nativeLanguage": "en", 
    "languages": [ 
     "en", 
     "fr", 
     "es" 
    ] 
    }, 
    "generator-jhipster-entity-audit": { 
    "auditFramework": "custom" 
    } 
} 

Ich habe auch die folgenden JHipster Plugins installiert:

  • jhipster-entity-Audit - zu & modifizierten Daten für jede Entität generierten Titel
  • jhipster-elasticsearch-reindexer - um einen REST-Endpunkt für das Neuindizieren elastischer
  • bereitzustellen

Und schließlich die Stacktrace:

2016-09-21 02:42:59.057 ERROR 20379 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception 

java.lang.IllegalStateException: Cannot change session ID. There is no session associated with this request. 
     at org.apache.catalina.connector.Request.changeSessionId(Request.java:2539) 
     at org.apache.catalina.connector.RequestFacade.changeSessionId(RequestFacade.java:918) 
     at javax.servlet.http.HttpServletRequestWrapper.changeSessionId(HttpServletRequestWrapper.java:249) 
     at javax.servlet.http.HttpServletRequestWrapper.changeSessionId(HttpServletRequestWrapper.java:249) 
     at sun.reflect.GeneratedMethodAccessor710.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:483) 
     at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:216) 
     at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:201) 
     at org.springframework.security.web.authentication.session.ChangeSessionIdAuthenticationStrategy.applySessionFixation(ChangeSessionIdAuthenticationStrategy.java:55) 
     at org.springframework.security.web.authentication.session.AbstractSessionFixationProtectionStrategy.onAuthentication(AbstractSessionFixationProtectionStrategy.java:87) 
     at org.springframework.security.web.authentication.session.ChangeSessionIdAuthenticationStrategy.onAuthentication(ChangeSessionIdAuthenticationStrategy.java:32) 
     at org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy.onAuthentication(CompositeSessionAuthenticationStrategy.java:89) 
     at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:98) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
     at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:112) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
     at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169) 
     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.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter(OAuth2AuthenticationProcessingFilter.java:176) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
     at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:121) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
     at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66) 
     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:106) 
     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:240) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
     at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
     at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
     at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) 
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) 
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) 
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502) 
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
     at java.lang.Thread.run(Thread.java:745) 

Jede Hilfe ist willkommen!

Antwort

1

Problem gelöst. Ich hatte die App so konfiguriert, dass sie hascast für die verteilte Sitzungsverwaltung verwendete, aber dann eine statusfreie Authentifizierungsmethode (oauth2) gewählt, die dazu führte, dass meine App keinen Sitzungscookie hatte, was zu dem oben beschriebenen Fehler führte.

Die Lösung bestand darin, den generierten Code für die Initialisierung der Hascast-Sitzungsverwaltung auszukommentieren, der aus zwei Zeilen bestand.

In CacheConfiguration.java, bemerkte ich aus der "clustered-http-sessions" Linie:

@Bean 
public HazelcastInstance hazelcastInstance(JHipsterProperties jHipsterProperties) { 
    log.debug("Configuring Hazelcast"); 
    Config config = new Config(); 
    config.setInstanceName("CUE2"); 

    config.getNetworkConfig().setPort(5701); 
    config.getNetworkConfig().setPortAutoIncrement(true); 

    // In development, remove multicast auto-configuration 
    if (env.acceptsProfiles(Constants.SPRING_PROFILE_DEVELOPMENT)) { 
     System.setProperty("hazelcast.local.localAddress", "127.0.0.1"); 

     config.getNetworkConfig().getJoin().getAwsConfig().setEnabled(false); 
     config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false); 
     config.getNetworkConfig().getJoin().getTcpIpConfig().setEnabled(false); 
    } 


    config.getMapConfigs().put("default", initializeDefaultMapConfig()); 
    config.getMapConfigs().put("com.ads.cue2.domain.*", initializeDomainMapConfig(jHipsterProperties)); 

    // vvv -- This line here -- vvv 
    // config.getMapConfigs().put("clustered-http-sessions", initializeClusteredSession(jHipsterProperties)); <-- This line here 
    // ^^^ -- -------------- -- ^^^ 

    hazelcastInstance = HazelcastInstanceFactory.newHazelcastInstance(config); 

    return hazelcastInstance; 
} 

In WebConfigurer.java ich in onStartup aus der initClusteredHttpSessions Linie kommentiert:

@Override 
public void onStartup(ServletContext servletContext) throws ServletException { 
    if (env.getActiveProfiles().length != 0) { 
     log.info("Web application configuration, using profiles: {}", Arrays.toString(env.getActiveProfiles())); 
    } 
    EnumSet<DispatcherType> disps = EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.ASYNC); 

    // vvv -- This line here -- vvv 
    // initClusteredHttpSessionFilter(servletContext, disps); 
    // ^^^ -- -------------- -- ^^^ 

    initMetrics(servletContext, disps); 
    if (env.acceptsProfiles(Constants.SPRING_PROFILE_PRODUCTION)) { 
     initCachingHttpHeadersFilter(servletContext, disps); 
    } 
    if (env.acceptsProfiles(Constants.SPRING_PROFILE_DEVELOPMENT)) { 
     initH2Console(servletContext); 
    } 
    log.info("Web application fully configured"); 
} 
+0

Könnten Sie erarbeiten die Klasse/code Sie heraus kommentiert das lösen? Ich bekomme diesen Fehler auch gelegentlich und möchte ihn loswerden. Vielen Dank. – gtiwari333

+0

@ gtiwari333 Ich habe meine Antwort bearbeitet um Details hinzuzufügen, hoffe das hilft ... – simon

Verwandte Themen