Bom pessoal.
Eu já postei essa pergunta no tópico avançado, mas resolvi postar aqui por ter mais a ver com Desenvolvimento web.
Estou fazendo um sistema web utilizando o Netbeans e Struts 1.3.8 (versão que vem no Netbeans).
Em todos meus encaminhamentos estou utilizando Actions .
Quero que determinadas páginas e actions, só possam ser acessadas se o usuário estiver logado no sistema.
Já inseri o usuário na sessão, consigo verificar se ele está logado ou não, só que tenho 2 problemas.
Como verificar se o usuário está logado sem precisar fazer essa verificação em todas Actions?
Como impedir o acesso das páginas JSPs pelo navegador, fazendo com que só possam ser acessadas através de chamada feita para alguma Action?
Pesquisei filters, interceptors e não consegui encontrar uma solução ou um exemplo de aplicação fazendo isso. Encontrei várias coisas, mas ambas confusas e com uma explicação feita bem pelas coxas.
Se alguém puder ajudar, agradeço.
O ideal é usar um Filter.
Se o usuário não estiver logado, redireciona para a página de login. Assim não precisa colocar nada nas actions.
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>