2012-12-23 20 views
0

我定義了一個PhaseListener來檢查JSF項目中的授權。但它不適用於HTML5。即使我添加到web.exml中的servlet映射的url = *。html,它也不適用於HTML5。因爲JSF2不支持HTML5的一些標籤。如帆布等如何在JSF項目中調用HTML5文件時檢查授權

在JSF項目中調用HTML5文件時,如何檢查授權?

回答

3

你應該首先沒有使用階段監聽器來完成這項工作,但是一個servlet filter。階段偵聽器僅在JSF請求上運行,即僅運行與FacesServlet的URL模式相匹配的請求。對於授權檢查的唯一目的,階段偵聽器是笨拙的方法。

這裏有這樣一個過濾器可以看怎麼樣一個具體的開球例如,假設你已經存儲在登錄用戶的User對象的會話:

@WebFilter("/*") 
public class LoginFilter implements Filter { 

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

     User user = (session != null) ? session.getAttribute("user") : null; 
     String loginURL = request.getContextPath() + "/login.xhtml"; 

     boolean loginRequest = request.getRequestURI().startsWith(loginURL); 
     boolean resourceRequest = request.getRequestURI().startsWith(request.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER); 

     if (user != null || loginRequest || resourceRequest)) { 
      chain.doFilter(request, response); 
     } else { 
      response.sendRedirect(loginURL); 
     } 
    } 

    // ... 
} 
+0

謝謝你,我現在嘗試它 – tufan

+0

嗨, 我已經完成登錄userBean(ManagedBean)jsf。所以我不知道如何設置用戶屬性。我可以使用jquery.post() - > servlet或userBean來設置嗎? – tufan

+0

順便說一下,過濾器正在工作,謝謝。我嘗試寫'request.getSession()。setAttribute(「user」,u);'in userBean – tufan

相關問題