Spring java.lang.IllegalStateException: Ne peut pas créer une session après la réponse a été commis

Je vais avoir une session de gestion de la question de mon ressort de l'application, voici le scénario.
Lorsqu'un utilisateur ouvre mon appli URL il va demander des informations d'identification et les journaux. Après que l'utilisateur looged en et si il ouvre un nouvel onglet et de le coller mon app URL il va demander à nouveau les informations d'identification et de connexion de l'utilisateur.

Maintenant, si l'utilisateur se déconnecte dans tab1 et si l'utilisateur veut effectue toute opération dans le deuxième onglet, l'utilisateur reçoit une erreur avec ci-dessous stacktrace et se déconnecte.

Oct 10, 2014 3:11:27 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [CollPortal] in context with path [/CollPortal] threw exception
java.lang.IllegalStateException: Cannot create a session after the response has been committed
at org.apache.catalina.connector.Request.doGetSession(Request.java:2886)
at org.apache.catalina.connector.Request.getSession(Request.java:2316)
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:898)
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:910)
at com.dc.core.common.FlashRecyclingFilter.doFilterInternal(FlashRecyclingFilter.java:22)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.dc.core.common.StripJSessionIdFilter.doFilter(StripJSessionIdFilter.java:101)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

Voici mon FlashRecyclingFilter

@Component
public class FlashRecyclingFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
super.doFilter(request, response, filterChain);
IFlash flash = new Flash(request.getSession());
flash.recycle();
}
}

Comment puis-je m'assurer que l'utilisateur devrait être capable d'effectuer des opérations dans un onglet lorsque l'utilisateur est connecté à un autre onglet? Quelqu'un peut-il m'aider avec mon problème?

Bien "corriger votre code" serait une réponse valable. Ne sais pas ce que FlashRecyclingFilter est en train de faire, mais l'erreur est là. Printemps de Sécurité probablement envoyé une redirection vers la page de login et de votre filtre est d'essayer de stocker quelque chose sur la session, ce qui n'existe pas. Vérifier HttpServletRequest#getSession(boolean).
J'ai mis à jour la question avec FlashRecyclingFilter Sa juste essayer d'obtenir session de request
Rendre le filtre no-op quand il n'y a pas de session. I. e. utilisation getSession(false) et passer le code si vous obtenez la valeur null.
Posté mon commentaire comme une réponse réelle.

OriginalL'auteur RanPaul | 2014-10-13