2012-06-11 48 views
1

我創建使用JSF,休眠,春天的Web應用程序。我添加了檢查會話的過濾器。我的濾波代碼爲:的Java FilterImplementation會話檢查

public class AdminFilter implements Filter{ 

    private ArrayList<String> urlList; 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     String urls = filterConfig.getInitParameter("avoid-urls"); 
     StringTokenizer token = new StringTokenizer(urls, ","); 
     urlList = new ArrayList<String>(); 

     while (token.hasMoreTokens()) { 
      urlList.add(token.nextToken()); 
     } 
    } 

    // Checking if user is logged in 
    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
       HttpServletRequest req= (HttpServletRequest) request; 
     HttpServletResponse resp= (HttpServletResponse) response; 
     String url = req.getServletPath(); 
     HttpSession session = req.getSession(); 
       if(!urlList.contains(url) && session.getAttribute("user")==null) 
       { 
        resp.sendRedirect(req.getContextPath() + "/backend/login/index.xhtml"); 

       } 
      chain.doFilter(req, resp); 
    } 

    @Override 
    public void destroy() { 
     // throw new UnsupportedOperationException("Not supported yet."); 
    } 

} 

在過濾器的init方法我有哪個會話檢查應該被跳過,像登錄頁面本身的一些避免URL。這是工作正確的,但這個過濾器限制我的CSS,圖像和JS載入登錄頁面。 建議我什麼是我的過濾器的問題?

+0

跳過JS,CSS?,它應該是像'/ PATH/TO/CSS/FROM/WEBROOT/CSS /' –

+0

​​避免的URL /後端/login/index.xhtml

+0

你有CSS,JS,Images的任何參數嗎?(正在使用登錄頁面)? –

回答

3

您的登錄頁面需要一些資源(CSS,JS,圖片),這是從單獨的請求瀏覽器請求將由過濾器截獲並因爲你沒有一個跳過等資源請求的任何參數(使用上登錄頁面),它會阻止此請求

建議:

你可以使用Spring-Security,而不是在寫你的投資的時候,它已經被配置

+0

好的,我明白了。非常感謝你的回答。 –

+0

歡迎:) –

3

根據您當前的配置得到了很大的靈活性, 目前如果該URL用於提取CSS,圖像或任何其他資源,則您的過濾器將會忽略。

boolean staticResources = (url.contains("css") || url.contains("images")); 
if(!urlList.contains(url) && session.getAttribute("user")==null && !staticResources) { 
     resp.sendRedirect(req.getContextPath() + "/backend/login/index.xhtml"); 
} 

這將避免會話檢查靜態內容。這樣做的

更好的辦法將利用領域使用的聲明性安全爲Java EE Web Security一部分。你在`urlList`添加什麼