2012-10-10 43 views
2

我有一個使用Spring Security的Spring MVC webapp。我想添加「商店已關閉」功能 - 即如果我將商店設置爲關閉,無論用戶嘗試在我的網站上瀏覽的位置,他們最終都會顯示「商店已關閉」頁面。Spring MVC /安全 - 「商店關閉」安全篩選器

我實現了一個安全過濾器如下(可以在細鐵絲吧):

public class ClosedFilter extends OncePerRequestFilter { 

@Override 
protected void doFilterInternal(HttpServletRequest req, 
     HttpServletResponse response, 
     FilterChain chain) throws ServletException, IOException { 

    if(storeIsClosed()) { 
     //do something useful here 
    }else { 
     chain.doFilter(req, response); 
      } 

} 

} 

但我不確定要放什麼東西在「//做一些有用的在這裏」位。我曾嘗試過:

throw new StoreIsClosedException(); //extends RuntimeException 

但我不能將異常映射到我的視圖。我也試過

response.redirect("myClosedView"); 

沒有運氣。我想要的是概念上的東西:

return new ModelAndView("closed"); 

謝謝。

+0

也許看設定的503 HTTP響應代碼,服務器暫時不可行,然後爲503表示關閉的503創建一個錯誤頁面。也許有人可以用確切的代碼來回答。我在打電話。 – Tinman

+0

感謝您的詳細信息,它激發了我對下面的解決方案的啓發 – user1736191

回答

2

我結束了一個解決方案,我改變了我的過濾器:

public class ClosedFilter extends OncePerRequestFilter { 

@Override 
protected void doFilterInternal(HttpServletRequest req, 
     HttpServletResponse response, 
     FilterChain chain) throws ServletException, IOException { 

    if (isClosed()) { 
     final String path = req.getContextPath()+"/closed.do"; 
     if(!path.equals(req.getRequestURI())) { 
      response.sendRedirect(path); 
      return; 
     } 
    } 
    chain.doFilter(req, response); 
} 


} 

,然後將此添加到我的security.xml

<intercept-url pattern="/closed.do*" access="permitAll"/>