Autenticação de usuário, sessão expirada

Galera, estou com uma dúvida sobre como autenticar um usuário no meu sistema inteiro. Eu criei uma classe para fazer o login, que pesquisa as informações no banco utilizando JPA (TopLink).

A dúvida: como chamar essa classe antes de qualquer coisa sem ter que colocar uma chamada dela em todas as classes do meu sistema?
Após o login ser feito pela primeira vez, as informações do usuário vão estar em session, e eu queria verificar se essas informações ainda são válidas antes de fazer qualquer coisa.

Atomus,

Adicione em seu web.xml um filtro.

  ...
  ...
  ...
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <filter>
    <filter-name>SecurityFilter</filter-name>
    <filter-class>br.com.seupacote.view.util.SecurityFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>SecurityFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>

  <filter-mapping>
    <filter-name>SecurityFilter</filter-name>
    <url-pattern>*.jspx</url-pattern>
  </filter-mapping>

  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  ...
  ...
  ...

Defina a classe SecurityFilter como exemplificado abaixo.

public class SecurityFilter implements Filter {
    // A página de login
    private static final String LOGIN_PAGE_URI = "/faces/sistema/login.jspx";

    // Objeto para registro de LOG
    private Log logger = LogFactory.getLog(this.getClass());

    // Um conjunto de recursos restritos
    private Set restrictedResources;

    /**
     * Inicializa Filtro.
     */
    public void init(FilterConfig filterConfig) throws ServletException {
	// Adicione nesse conjunto as páginas que deverão ser acessadas após login.
        this.restrictedResources = new HashSet();
        this.restrictedResources.add("/faces/sistema/login.jspx");
        this.restrictedResources.add("/faces/sistema/home.jspx");
        this.restrictedResources.add("/faces/sistema/cliente.jspx");
    }

    /**
     * Objeto Padrão doFilter.
     */
    public void doFilter(ServletRequest req, ServletResponse res, 
                         FilterChain chain) throws IOException, 
                                                   ServletException {
        this.logger.debug("doFilter");

        String contextPath = ((HttpServletRequest)req).getContextPath();
        String requestURI = ((HttpServletRequest)req).getRequestURI();


        if (requestURI.contains(LOGIN_PAGE_URI) && this.authorize((HttpServletRequest)req)) {
            logger.debug("Usuário já foi autorizado.");
            ((HttpServletRequest)req).getRequestDispatcher(HOME_PAGE_URI).forward(req, res);
        } else if (this.contains(requestURI, contextPath) && !this.authorize((HttpServletRequest)req)) {
            logger.debug("Falha na autorização");
            ((HttpServletRequest)req).getRequestDispatcher(LOGIN_PAGE_URI).forward(req, res);
        } else {
            logger.debug("Autorização bem sucedida");
            chain.doFilter(req, res);
        }
    }

    public void destroy() { }

    private boolean contains(String value, String contextPath) {
        Iterator ite = this.restrictedResources.iterator();
        while (ite.hasNext()) {
            String restrictedResource = (String)ite.next();
            if ((contextPath + restrictedResource).contains(value)) {
                return true;
            }
        }
        return false;
    }

    private boolean authorize(HttpServletRequest req) {
        LoginBean acesso = (LoginBean)req.getSession().getAttribute("LoginBean");

        if (acesso != null && acesso.getLoggedIn()) {
            return true;
        } else {
            return false;
        }
    }
}

@braços,