2013-08-17 1 views
3

Как обрабатывать тайм-аут сеанса весной mvc 3.2, например, через 30 минут он должен перенаправить на index.html.Ручной тайм-аут сеанса?

Пробовал перехватчик, но значения тайм-аута сеанса, указанные в web.xml, были проигнорированы.

весна-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 { 
    } 
+0

Итак, что именно происходит? Пользователь делает запрос, но перехватчик не вызывается? Или сервер не делает запрос, но вы ожидаете, что страница будет автоматически перенаправлена ​​на/login? Какие? Опишите свой сценарий. –

+0

Проблема заключается в вызове Interceptor. но сервер не делает запрос. – user2692100

+0

Опишите свой сценарий. Сервер получает запрос, но не выполняет запросы. Я до сих пор не понимаю. –

ответ

1

Может быть, лучше справиться с обычной Java EE, чем Spring MVC: Тип 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 
    } 
} 
+0

Спасибо, я добавил sessionEvent.getSession() == null || sessionEvent.getSession(). equals (""), но я не могу перенаправить ti index.jsp. Нужно ли вручную аннулировать сеанс? На каждой странице мне нужно проверить сеанс, а затем перенаправить на индексную страницу? – user2692100

2
<system.web> 
    <sessionState allowCustomSqlDatabase="true" mode="SQLServer" 
    sqlConnectionString="SQLServerConnection" cookieless="false" timeout="60"> 
    </sessionState> 
    <authentication mode="None" /> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" maxRequestLength="52428800" /> 
</system.web> 

- Этот код положить в web.config

$.timeoutDialog 
    ({ 
     timeout: 60 * 60, 
     countdown: 20, 
     logout_url: '@Url.Action("Logout", "Login")', restart_on_yes: true 
    }); 
  • Этот код поместить на страницу настройки и использовать "timeout_dialog.js" it.and другие детали, заданные в файле .js.

    public override void OnActionExecuting(ActionExecutingContext 
        filterContext) 
    { 
    
        if (filterContext.HttpContext.Session["UserID"] == null) 
        { 
         if (filterContext.HttpContext.Request.IsAjaxRequest()) 
         { 
          filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; 
          filterContext.Result = new JsonResult 
          { 
           JsonRequestBehavior = JsonRequestBehavior.AllowGet, 
           Data = new 
           { 
            Exception="error" 
           } 
          }; 
         } 
         else 
         { 
          filterContext.Result = new RedirectToRouteResult(
          new RouteValueDictionary 
          { 
           { "controller", "Login" }, 
           { "action", "Login" } 
          }); 
           //return; 
         } 
         return; 
    
        } 
        base.OnActionExecuting(filterContext);    
    } 
    

    Этот код помещается в файл filter.cs в файле общей папки классов.

Смежные вопросы