Servlet filter with JSF

后端 未结 1 511
北恋
北恋 2021-01-22 20:30

I tried to configure Servlet filter with JSF. I get lot of problems here I am using PrimeFaces also.

Here is my web.xml



        
1条回答
  •  轻奢々
    轻奢々 (楼主)
    2021-01-22 20:52

    With CDI I use this. Seems to work fine. Redirects on ajax requests too.

    All pages are in /secure/, except login.xhtml which are in the root.

             
        LoginFilter         
        ...LoginFilter     
          
             
        LoginFilter         
        /secure/*     
      
    

    Filter:

    @Inject
    private LoginBean loginBean;
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
        // Set response headers to no-cache
        HttpServletResponse res = (HttpServletResponse) response;
        HttpServletRequest req = (HttpServletRequest) request;
        res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
        res.setHeader("Pragma", "no-cache"); // HTTP 1.0.
        res.setDateHeader("Expires", 0); // Proxies.
    
        // Check if user logged in, if not redirect to login.xhtml
        if (loginBean == null || !((LoginBean) loginBean).isLoggedIn()) {
            boolean isAjax = "XMLHttpRequest".equals(req.getHeader("X-Requested-With"));
    
            if (!isAjax) {
                res.sendRedirect(req.getContextPath() + "/login.xhtml"); 
            } else {
                // Redirecting an ajax request has to be done in the following way:
                // http://javaevangelist.blogspot.dk/2013/01/jsf-2x-tip-of-day-ajax-redirection-from.html
                String redirectURL = res.encodeRedirectURL(req.getContextPath() + "/login.xhtml");
                StringBuilder sb = new StringBuilder();
                sb.append("");
                res.setCharacterEncoding("UTF-8");
                res.setContentType("text/xml");
                PrintWriter pw = response.getWriter();
                pw.println(sb.toString());
                pw.flush();
            }
        } else {
            // Let chain of filters continue;
            chain.doFilter(request, response);
        }
    }
    

    login.xhtml:

    
        
    
            
             
    
                
                                
                                
                                
                                
                
                 
    .... close tags
    

    LoginBean is a simple SessionScoped CDI bean.

    0 讨论(0)
提交回复
热议问题