簡體   English   中英

在SpringMVC 3.1中的應用程序中,Grinder運行時顯示“預期的會話屬性xxxxxx”錯誤

[英]Application in SpringMVC 3.1, Grinder runs show “Expected session attribute xxxxxx” error

首先,我要感謝您審閱此問題,並提供任何幫助-非常感謝!

我已經在Openshift環境中的Spring MVC框架(3.1.1)中開發了一個應用程序。 我已經對其功能進行了測試並感到滿意。

當我在Grinder上加載用於性能測試的應用程序時,我收到以下消息,其中很多:

ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/].[MVCDispatcher]] (http-/127.8.157.1:8080-5) JBWEB000236: Servlet.service() for servlet MVCDispatcher threw exception: org.springframework.web.HttpSessionRequiredException: Expected session attribute 'session_account'

在我的應用程序中,session_account是3類的會話屬性(由@SessionAttribute({...})定義)。 它也定義為@ModelAttribute。

這3個類之一是LoginController.java,它通過@ModelAttribute(“ session_account”)注釋的方法來初始化session_account。 它還包含對用戶進行身份驗證的REST服務,並在身份驗證后將值設置為session_account。 我的功能測試(似乎)證實,每個經過身份驗證的用戶都定義了session_account。

現在進行Grinder的性能測試。 以下是一些觀察結果:

  1. 大多數測試腳本都會產生大量上述錯誤消息。

  2. 當我限制Grinder使用一個(java)線程運行一個用戶時,沒有錯誤。 一旦我將環境放寬到一個以上的用戶或多個(java)線程,就會出現此錯誤消息。

  3. 錯誤消息似乎來自Spring層。 我很難將其映射到我的應用程序代碼(行)

  4. 在我的應用程序日志中,此錯誤(行)經常在帶有更高時間戳的行之后出現,例如:

     2014/03/03 13:44:22,930 INFO [org.SandRiver.Controllers.JspController] (http-127.8.157.1/127.8.157.1:8080-32) home page 2014/03/03 13:44:22,822 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/].[MVCDispatcher]] (http-127.8.157.1/127.8.157.1:8080-54) JBWEB000236: Servlet.service() for servlet MVCDispatcher threw exception: org.springframework.web.HttpSessionRequiredException: Expected session attribute 'session_account' 

我用Google搜索了“期望的會話屬性”,並查閱了Spring文檔中的相關章節。 不幸的是,我仍然在這里尋求幫助。

我已經迷路了,以至於我什至不知道哪個文件/代碼片段與此問題有關。 這是web.mxl,但很樂意提供更多信息。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true" version="3.0">
  <display-name>LiquibilClient</display-name>

  <servlet>
    <servlet-name>MVCDispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>MVCDispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>/WEB-INF/MVCDispatcher-servlet.xml,
                 /WEB-INF/applicationContext.xml,               
                 /WEB-INF/application-security.xml              
     </param-value>
  </context-param>

  <listener>
     <listener-class>
        org.springframework.web.context.ContextLoaderListener
     </listener-class>
  </listener>

  <listener>
     <listener-class>
      org.springframework.security.web.session.HttpSessionEventPublisher
     </listener-class>
  </listener> 

  <filter>
     <filter-name>Set Character Encoding</filter-name>
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
     <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
     </init-param>
     <init-param>
       <param-name>forceEncoding</param-name>
       <param-value>true</param-value>
     </init-param>
   </filter>

   <filter-mapping>
     <filter-name>Set Character Encoding</filter-name>
     <url-pattern>*.do</url-pattern>
   </filter-mapping>

   <!-- Spring Security  -->
     <filter>
         <filter-name>springSecurityFilterChain</filter-name>
         <filter-class>
                   org.springframework.web.filter.DelegatingFilterProxy
                 </filter-class>
     </filter>

     <filter-mapping>
         <filter-name>springSecurityFilterChain</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>  
 </web-app>

我認為問題可能是由Grinder在與更多請求打服務器之前沒有等待身份驗證請求返回引起的。 該會話已經存在,但是還沒有session_account,因此您的錯誤會累積,直到返回身份驗證響應為止。

您可以添加一個過濾器,以防止http請求在身份驗證調用期間進入,或者您可以更改Grinder腳本,以等到返回第一個響應后再允許其他請求運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM