Inicio de sesión de sesión HTTP JSF

Intento crear un formulario de inicio de sesión en la aplicación web. en la página JSP puedo usar

<%
   String name = request.getParameter( "username" );
   session.setAttribute( "theName", name );
%>

pero ahora estoy usando JSF / Facelets para la aplicación web No sé cómo crear una sesión en JSF Backing bean para el cliente y verificar si el usuario ha iniciado sesión o no, por lo que redirigirá a la página de inicio de sesión. ¿Quién puede ayudarme a darme un tutorial de enlace para estos problemas? gracias antes

Ahora tengo un pequeño problema con la asignación al código web.xml recortado de la clase Filter

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    this.config = filterConfig;
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;
    LoginController controller = (LoginController) req.getSession()
            .getAttribute("loginController");
    if (controller == null || !controller.isLoggedIn()) {
        res.sendRedirect("../admin/login.xhtml");
    } else {
        chain.doFilter(request, response);
    }
}

y enweb.xml&nbsp;Yo mapeo con<fitler>&nbsp;etiqueta

<filter>
    <filter-name>userLoginFilter</filter-name>
    <filter-class>com.mcgraw.controller.UserLoginFilter</filter-class>
    <init-param>
        <param-name>loginPage</param-name>
        <param-value>/login.xhtml</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>userLoginFilter</filter-name>
    <url-pattern>/admin/*</url-pattern>
</filter-mapping>

Tengo un administrador de carpetas en el proyecto web y compruebo si el usuario no ha iniciado sesión con permiso de administrador para no acceder a la página (puedo hacer la verificación de permisos), pero cuando uso el filtro, ¿el navegador no comprende la URL? no se muestra StackTrace cuando el navegador no entiende la URL

Error mostrado en Firefox

The page isn't redirecting properly

en IE cargando ... cargando. .. sin parar

ahora cambio la condición que comprueba si req.getPathInfo.startsWith ("/ login.xhtml") hará una cadena

Tengo 2 ideas pero responde 500 ESTADO HTTP

 if (controller == null || !controller.isLoggedIn()) {
     res.sendRedirect("../admin/login.xhtml");
     if(req.getPathInfo().startsWith("/login.xhtml")){
     chain.doFilter(request, response);
}

} else {
     chain.doFilter(request, response);
}

===============

if (controller == null || !controller.isLoggedIn()) {
    if (!req.getPathInfo().startsWith("/login.xhtml")) {
        res.sendRedirect("../admin/login.xhtml");
    } else {
        chain.doFilter(request, response);
    }
} else {
    chain.doFilter(request, response);
}

====================== actualizar Class loginController

package com.mcgraw.controller;

import com.DAO.UserBean;
import com.entity.IUser;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 * @author Kency
 */
@ManagedBean
@SessionScoped
public class LoginController implements Serializable {

    @EJB
    private UserBean userBean;
    private IUser user;
    private boolean admin;
    private boolean mod;
    private PasswordService md5;

    /** Creates a new instance of LoginController */
    public LoginController() {
        user = new IUser();
        md5 = new PasswordService();
    }

    // getter / setter
    public boolean isMod() {
        return mod;
    }

    public void setMod(boolean mod) {
        this.mod = mod;
    }

    public IUser getUser() {
        return user;
    }

    public void setUser(IUser user) {
        this.user = user;
    }

    public boolean isAdmin() {
        return admin;
    }

    public void setAdmin(boolean admin) {
        this.admin = admin;
    }

    public String cplogin() {
        String md5Password = md5.md5Password(user.getPassword());
        if (userBean.userLogin(user.getUsername(), md5Password) != null) {
            if (user.getUsername() != null || md5Password != null) {
                user = userBean.userLogin(user.getUsername(), md5Password);
                if (user.getGroups().getAdmin() != null) {
                    setAdmin(user.getGroups().getAdmin());
                }
                if (user.getGroups().getMods() != null) {
                    setMod(user.getGroups().getMods());
                }
                if (isAdmin() == true || isMod() == true) {
                    return "home";
                } else {
                    return "login";
                }
            } else {
                return "login";
            }
        } else {
            return "login";
        }
    }

    public String logout() {
        user = null;
        return "login";
    }

    public boolean isLoggedIn() {
        return user != null;
    }
}

Tengo un nuevo problema si renderizar JSF taglib con el método loginIn, en la página de índice (no en la carpeta de administración) el usuario no puede ver lo que presento, <== esto como si el usuario no inicia sesión, el usuario no puede ver pero ¿Por qué puede verlo?