2013-08-27 23 views
6

Tôi nhận được ngoại lệ sau đây sau khi tôi làm mất hiệu lực phiên PortletRequest trong mã của tôijava.lang.IllegalStateException: getAttribute: phiên đã không còn giá trị

Aug 27, 2013 7:07:13 AM org.apache.catalina.core.ApplicationDispatcher invoke 
SEVERE: Servlet.service() for servlet xyzapplication Servlet threw exception java.lang.IllegalStateException: getAttribute: Session already invalidated 
    at org.apache.catalina.session.StandardSession.getAttribute(StandardSession.java:1165) 
    at org.apache.catalina.session.StandardSessionFacade.getAttribute(StandardSessionFacade.java:122) 
    at com.liferay.portal.servlet.SharedSessionWrapper.getAttribute(SharedSessionWrapper.java:75) 
    at com.liferay.portlet.PortletSessionImpl.getAttribute(PortletSessionImpl.java:55) 
    at org.springframework.web.portlet.context.PortletRequestAttributes.updateAccessedSessionAttributes(PortletRequestAttributes.java:256) 
    at org.springframework.web.context.request.AbstractRequestAttributes.requestCompleted(AbstractRequestAttributes.java:48) 
    at org.springframework.web.portlet.FrameworkPortlet.processRequest(FrameworkPortlet.java:552) 
    at org.springframework.web.portlet.FrameworkPortlet.processAction(FrameworkPortlet.java:460) 
    at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:70) 
    at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:48) 
    at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:111) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:73) 
    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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) 
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593) 
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530) 
    at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java:534) 
    at com.liferay.portlet.InvokerPortletImpl.invokeAction(InvokerPortletImpl.java:579) 
    at com.liferay.portlet.InvokerPortletImpl.processAction(InvokerPortletImpl.java:294) 
    at com.liferay.portal.action.LayoutAction.processPortletRequest(LayoutAction.java:944) 
    at com.liferay.portal.action.LayoutAction.processLayout(LayoutAction.java:688) 
    at com.liferay.portal.action.LayoutAction.execute(LayoutAction.java:249) 
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) 
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) 
    at com.liferay.portal.struts.PortalRequestProcessor.process(PortalRequestProcessor.java:176) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) 
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    at com.liferay.portal.servlet.MainServlet.callParentService(MainServlet.java:560) 
    at com.liferay.portal.servlet.MainServlet.service(MainServlet.java:537) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163) 
    at com.liferay.portal.servlet.filters.secure.SecureFilter.processFilter(SecureFilter.java:294) 
    at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:73) 
    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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329) 
    at com.liferay.portal.servlet.FriendlyURLServlet.service(FriendlyURLServlet.java:138) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163) 
    at com.liferay.portal.servlet.filters.strip.StripFilter.processFilter(StripFilter.java:335) 
    at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163) 
    at com.liferay.portal.servlet.filters.gzip.GZipFilter.processFilter(GZipFilter.java:123) 
    at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108) 
    at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163) 
    at com.liferay.portal.servlet.filters.secure.SecureFilter.processFilter(SecureFilter.java:294) 
    at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108) 
    at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163) 
    at com.liferay.portal.servlet.filters.i18n.I18nFilter.processFilter(I18nFilter.java:241) 
    at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163) 
    at com.liferay.portal.servlet.filters.autologin.AutoLoginFilter.processFilter(AutoLoginFilter.java:246) 
    at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108) 
    at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163) 
    at com.liferay.portal.servlet.filters.sso.ntlm.NtlmPostFilter.processFilter(NtlmPostFilter.java:83) 
    at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108) 
    at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163) 
    at com.liferay.portal.sharepoint.SharepointFilter.processFilter(SharepointFilter.java:80) 
    at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108) 
    at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163) 
    at com.liferay.portal.servlet.filters.virtualhost.VirtualHostFilter.processFilter(VirtualHostFilter.java:216) 
    at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:187) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:95) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:738) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:167) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:95) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:167) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:95) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:187) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:95) 
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:73) 
    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:225) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at com.googlecode.psiprobe.Tomcat60AgentValve.invoke(Tomcat60AgentValve.java:30) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 

và mã hiệu lực phiên của tôi là như sau: Bằng cách này phương thức này được gọi từ một phương thức khác có gắn thẻ @ActionMapping với nó.

private void exit(PortletRequest request, ActionResponse response) { 
    logger.debug("Entering exit"); 
    String exitURL = Constants.EXIT_URL; 
    request.getPortletSession().invalidate(); 
    try { 
     response.sendRedirect(exitURL); 
    } catch (IOException ex) { 
     logger.error("Error: IOException: {}", ex.getMessage()); 
     throw new RuntimeException(ex); 
    } 

    logger.debug("Exiting exit"); 
} 

Tôi tìm thấy một câu hỏi đã tồn tại trong stackoverflow liên quan đến phiên huỷ bỏ hiệu lực IllegalStateException: getAttribute: Session already invalidated nhưng tôi không thể nhận được nhiều ra khỏi nó trong trường hợp của tôi.

Ai đó có thể giúp tôi cách tiếp cận vấn đề này vì lỗi này xảy ra, khi điều khiển chuyển sang mã Spring và do đó tôi không thể tiếp cận khắc phục sự cố này?

+0

Bạn có thể thử thêm 'trạng thái SessionStatus' vào chữ ký phương thức của mình không, sau đó thực hiện' status.setCompleted() 'thay vì làm mất hiệu lực phiên thông qua yêu cầu? Ngoài ra, hãy thử làm mất hiệu lực sau khi bạn thực hiện 'response.sendRedirect()'. – CodeChimp

+0

Lỗi không xảy ra tại thời điểm thực hiện request.getPortletSession(). Invalidate(); hoặc thậm chí không tại điểm response.sendRedirect (exitURL) ;. Điều đó xảy ra khi sự kiểm soát của tôi biến mất khỏi mã viết của tôi, tức là khi điều khiển quay trở lại mùa xuân. vì vậy tôi đoán việc thực hiện od lệnh của các báo cáo trên không quan trọng. – stallion

+0

Đậu phiên có gây ra vấn đề gì không? theo nghĩa nào tôi phải vô hiệu hóa chúng một cách riêng biệt? nếu có khi nào tôi nên vô hiệu hóa chúng và làm thế nào tôi có thể làm mất hiệu lực chúng? – stallion

Trả lời

-1

Hãy thử sử dụng SessionStatus thay vì:

private void exit(PortletRequest request, ActionResponse response, SessionStatus status) { 
    logger.debug("Entering exit"); 
    String exitURL = Constants.EXIT_URL; 
    status.setComplete(); // instead of request.getPortletSession().invalidate() 
    try { 
     response.sendRedirect(exitURL); 
    } catch (IOException ex) { 
     logger.error("Error: IOException: {}", ex.getMessage()); 
     throw new RuntimeException(ex); 
    } 

    logger.debug("Exiting exit"); 
} 

Tôi không nghĩ rằng điều này sẽ tạo sự khác biệt, nhưng nó có giá trị một thử.

+0

Không hoạt động. tôi đã kiểm tra :( – stallion

+0

Tôi không chắc liệu thông tin này có giúp ích hay không, nhưng tôi cho rằng giá trị của nó cho thông tin này: 1. Tôi đã tạo bean với phạm vi phiên và được tạo bằng proxy () 2. The phương thức thực hiện việc hủy hợp lệ phiên này được gọi từ phương thức được chú thích theo mặc định bằng actionmapping. – stallion

Các vấn đề liên quan