2017-08-21 133 views
0

大家早上好! 我有了訪問控制的應用程序,它工作正常 但用戶可以寫在他沒有獲得通過URL阻止頁面訪問

有人能幫助我解決這個瀏覽器,並訪問頁的URL?

下面是過濾

@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filter) throws IOException, ServletException { 
    HttpServletRequest req = (HttpServletRequest) request; 
    HttpSession session = req.getSession(); 

    if (session.getAttribute("sessionUser") != null 
      || req.getRequestURI().endsWith("Login.xhtml")) { 
     System.out.println("if"); 
     filter.doFilter(request, response); 
    } else { 
     System.out.println("else"); 
     HttpServletResponse res = (HttpServletResponse) response; 
     res.sendRedirect(req.getContextPath()+"/Login.xhtml"); 
    } 
} 
+0

看起來就像您需要過濾器來處理URL訪問安全性的情況。看看[這個問題](https://stackoverflow.com/questions/8480100/how-implement-a-login-filter-in-jsf)瞭解更多信息。 – Bonifacio

+0

您的訪問控制是如何實施的?你使用了什麼框架?您的問題與您的過濾器本身相關的問題更多 –

+0

當通過菜單和按鈕調用屏幕時,我的過濾器工作正常。 但是,當我從網頁中獲取網址並將其粘貼到瀏覽器中時,它不起作用。 如何知道該頁面是通過按鈕/菜單調用還是通過瀏覽器中粘貼的url? –

回答

0

實施答案之前,我建議你使用一個安全框架來控制頁面的訪問。像春天的安全強大的東西。

但在這種情況下,您僅檢查了用戶會話是否經過驗證,但沒有與添加到會話的頁面或頁面名稱相關。 在成功登錄後,您應該將所有用戶訪問的頁面(例如名稱)添加到會話中作爲屬性,然後在此過濾器中檢查用戶請求訪問的頁面? 如果會話屬性包含該頁面dofilter調用else else重定向到訪問被拒絕的頁面。

+1

或者JBoss PicketLink或者Apache Shiro或者其他很好用/已知的 – Kukeltje