[RESOLVIDO] Controle de Acesso - Session, JPS e Struts

Bom amigos, tô fazendo um sistema web utilizando o Netbeans 6.9 com o Struts 1.3.8 que já vem com a IDE.

Até aí tudo bem, fiz a tela de login, cadastro, etc.
Assim que o usuário é validado eu insiro o objeto na sessão e já verifiquei em outras Actions se o usuário está na sessão para continuar a execução e exibição de algumas outras páginas JSP.

O problema é, como eu posso fazer essa verificação de acesso do usuário, sem precisar colocar em toda Action ou toda JSP?
Vi a utilização de Interceptors, porém, só vi exemplos utilizando Struts 2.

Algumas páginas o acesso é livre sem necessário o Login, mas outras eu preciso verificar se está ou não logado.
A dúvida principal é: como verificar a sessão antes de executar determinadas actions sem precisar fazer em toda Action?

Outra dúvida, como impedir o acesso das JSPs pela URL? Todas são acessadas através de Actions, porém, se eu digitar o endereço da JSP no navegador ainda consigo entrar nessas páginas.

Espero que alguém me ajude.
Desde já, obrigado.

Maracuja,
dei uma pesquisada, li e não encontrei nenhum exemplo “útil” da coisa funcionando. Pra falar a verdade, tudo que encontrei foi bem confuso.
A utilização de Filters como vc indicou, no caso seria pra proteger as páginas JSPs de serem acessadas diretamente pela URL correto?

E em relação ao controle do usuário na sessão?
Vi em alguns lugares que criaram uma classe e um método para essa verificação. Esse método era executado no início de todas Actions onde era necessária a validação de Login.
Tô quase pensando em fazer isso.

Vi não me lembro onde e já faz tempo, que era criado uma classe (parecidíssima com uma Action) que era executada automaticamente antes de qualquer action e ela fazia essa verificação de login e em seguida encaminhava para a action definida no form JSP (se o usuário estivesse logado). Acho que é o tal do Interceptor

O problema do google é que agente acha muita coisa, mas dependendo do caso apenas 1% presta.

Se tiver um exemplo funcional do Filter para a URL será de grande ajuda.

Obrigado pela ajuda.

Bom, consegui resolver aqui depois de muita pesquisa e tentativas e erro.

Todas as JSPs que se encontram no diretório “paginas” não podem ser acessadas pela URL e irão retornar para a tela de login (welcomeStruts.jsp).
Você só conseguirá entrar nelas pela URL caso tenha logado no sistema.

Não é isso exatamente o que eu quero, além de proibir o acesso das JSPs também quero impedir o acesso das Actions a não ser que o usuário esteja logado. Acho que isso é possível de ser feito criando um Filter separado para as actions, o que eu tentarei em seguida.
Segue o código para ajudar alguém que precise.

Filter:

public class ActionFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {


        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;
        HttpSession session = req.getSession();

        if (session.getAttribute("user") != null) {
            System.out.println("AQUI LOGADO");
            chain.doFilter(request, response);
        } else {
            System.out.println("AQUI NAO LOGADO");
            resp.sendRedirect(req.getContextPath() + "/welcomeStruts.jsp");
        }
    }

    public void destroy() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

Web.xml

<filter>
        <filter-name>ActionFilter</filter-name>
        <filter-class>com.myapp.struts.ActionFilter</filter-class>        
    </filter>
    <filter-mapping>
        <filter-name>ActionFilter</filter-name>
        <url-pattern>/paginas/*</url-pattern>
    </filter-mapping>  

Você deve implementar este tipo de segurança usando um filter.

Pode aprender um pouco mais sobre o assunto olhando aqui ou procurando mais no google.

Essencialmente vc declara um filtro, para que todas as suas requisições “passem” por ele, e ai então vc pode fazer alguma validação, por exemplo, se existe um atributo “usuário” na sessão, caso não tenha redireciona-lo para uma página de acesso negado e etc.

Espero que ajude.

[]'s

Opa, legal, é por aí mesmo. Por exemplo se vc tiver um filter-mapping assim

<filter-mapping>
        <filter-name>PortalSecurityFilter</filter-name>
        <url-pattern>*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

todas suas requisições passarão por ele, inclusive para suas “actions”.

Vlw