3

たとえば、Spring MVC 3.2 でセッション タイムアウトを処理する方法は、30 分後に index.html にリダイレクトする必要があります。

インターセプターで試してみましたが、web.xml で指定されたセッション タイムアウト値が無視されました。

spring-servlet.xml

 <mvc:interceptors>   
   <bean class="com.server.utils.AuthenticationTokenInterceptor" />   
   </mvc:interceptors>

web.xml

<session-config>
    <session-timeout>30</session-timeout>
  </session-config>

 @Override  
    public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {   
     try  
        {System.out.println("Inside Interceptor");   
            HttpSession session = request.getSession();   
            String authToken = (String) session.getAttribute("userId");   
               System.out.println("Interceptor invoked For Auth token");   
                if(authToken==null || authToken.equals(""))   
                {   
                    System.out.println("Auth Token time Out");   
                 response.sendRedirect(servletContext.getContextPath()+"/login");   
                    return false;   
                }   
                else  
                {   
                 return true;   
                }   
       }catch(Exception ex)   
           {   
           ex.getMessage();   
          response.sendRedirect(servletContext.getContextPath()+"/login");   
              return false;   
           }   
        }   


    @Override  
    public void postHandle(HttpServletRequest request,   
          HttpServletResponse response, Object handler,   
        ModelAndView modelAndView) throws Exception {   
   }   

   @Override  
 public void afterCompletion(HttpServletRequest request,   
         HttpServletResponse response, Object handler, Exception ex)   
            throws Exception {   
    }
4

2 に答える 2

1

おそらく、Spring MVC よりもプレーンな Java EE で処理する方がよいでしょう。タイプjavax.servlet.http.HttpSessionListenerには、タイムアウトを含む現在のユーザー セッションに発生するすべての変更が通知されます。を使用するjavax.servlet.http.HttpSessionListenerには、 に登録する必要がありますweb.xml

<web-app ...>
        <listener>
        <listener-class>stuff.MySessionListener</listener-class>
    </listener>
</web-app>

そして、クラスでカスタム ロジックを実行します。タイムアウトを処理するメソッドは次のsessionDestroyedとおりです。

package stuff;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MySessionListener implements HttpSessionListener {     

  @Override
  public void sessionCreated(HttpSessionEvent arg0) {
  }

  @Override
  public void sessionDestroyed(HttpSessionEvent arg0) {
      //Your logic goes here
  } 
}
于 2013-08-18T00:13:43.390 に答える