如果用户未登录JSF,则重定向到“登录”页面

Raj*_*lli 3 jsf redirect login

我正在开发一个JSF应用程序。仅适用于授权用户。

因此,每当有人尝试通过URL访问任何页面时,都应重定向到Login。

我正在使用XHTML作为前端。并使用JSF框架。

我将Session Bean存储在Login Bean中。

不幸的是,我使用了Servlet和静态页面“ response.sendRedirect()”。

提前致谢。

我认为一种解决方案是将所有页面都放在WEB-INF中,但是一个问题是我正在使用resonse.sendRedirect(),而且我正在使用带有facelets的模板。

请给我建议。


文件夹中的“我的登录”页面

"/Common/Login.xhtml" 和一些页面

"/Admin/*.xhtml"
Run Code Online (Sandbox Code Playgroud)

和一些页面

`"Employee/*.ahtml"` 
Run Code Online (Sandbox Code Playgroud)

如何为这2个文件夹Admin和Employee设置筛选器

我给了像这样,但要求不要加入Filter Servlet

<filter-mapping>    
     <filter-name>LoginFilter</filter-name>   
      <url-pattern>/faces/Admin/*</url-pattern>    
     <url-pattern>/faces/Employee/*</url-pattern>           
<dispatcher>REQUEST</dispatcher>
       <dispatcher>FORWARD</dispatcher>  
   </filter-mapping>` 
Run Code Online (Sandbox Code Playgroud)

如果我这样给

 <url-pattern>/*</url-pattern>
Run Code Online (Sandbox Code Playgroud)

它会进入无限循环,请为此问题提供解决方案

Raj*_*lli 5

我解决了这个问题。我的过滤器映射

  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/*</url-pattern>

    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

和我的过滤器类

 public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)
        throws IOException, ServletException {
    System.out.println("Entered intop Login Filter");
    HttpServletRequest req = (HttpServletRequest) request;
    LoginBean login = (LoginBean) req.getSession().getAttribute("login");
    String path = req.getRequestURI().substring(req.getContextPath().length());
    System.out.println("path:" + path);

    if (path.contains("/Admin/") || path.contains("/Employee/")) {
        if (login != null) {
            if (login.getUsername() != null && !login.getUsername().equals("")) {
                chain.doFilter(request, response);
            } else {
                HttpServletResponse res = (HttpServletResponse) response;
                res.sendRedirect("/EMS2/faces/Html/Common/Login.xhtml");
            }
        } else {
            HttpServletResponse res = (HttpServletResponse) response;
            res.sendRedirect("/EMS2/faces/Html/Common/Login.xhtml");
        }


    } else {
        chain.doFilter(request, response);
    }
}
Run Code Online (Sandbox Code Playgroud)