Olá, estou acompanhando a apostila da Caelum e cheguei na parte dos interceptadores.
Eu não conseguir fazer, dei uma boa pesquisada aqui no forum e achei algumas coisas porém nada que desse certo.
Ele pede para que eu add o interceptador no struts-xml que está dentro da pasta src, porém esse strutsxml NÃO EXSTE.
Ai fica dificil né…
Minha classe de interceptador está assim:
package br.com.jdbc.interceptor;
import br.com.cfr.jdbc.modelo.Usuario;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class AutorizadorInterceptor implements Interceptor {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init() {
// TODO Auto-generated method stub
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Usuario usuarioLogado = (Usuario)invocation.getInvocationContext().
getSession().get("usuarioLogado");
if (usuarioLogado == null) {
return "naoLogado";
}
return invocation.invoke();
}
}
Muito obrigado!!
[quote=JoaoMarques]
Ele pede para que eu add o interceptador no struts-xml que está dentro da pasta src, porém esse strutsxml NÃO EXSTE.
Ai fica dificil né…[/quote]
#Euri.
Camarada, você precisa criar o arquivo struts.xml (veja bem o nome do arquivo, trata-se da versão 2 do Struts, ok?).
Existem vários exemplos na net e, também, nos exemplos do próprio Struts 2, quando você baixa o pacote full.
AHHHH, então é só cria-lo?
então beleza… vou dar uma testada aqui e qualquer coisa posto de novo, obrigado!
[quote=JoaoMarques]AHHHH, então é só cria-lo?
então beleza… vou dar uma testada aqui e qualquer coisa posto de novo, obrigado![/quote]
Exatamente.
Pesquise na web por struts.xml e veja exemplos para criar um com a versão xsd compatível com a que está utilizando.
Bom então fui dar aquela testada e o projeto nem chegou a carregar 
Eu tento acessar um link qualquer e ele mostra o erro 404.
Pior que estou seguindo tudo que está escrito na apostila x.x.
Olha oque eu já cheguei a fazer:
Struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<package>
<interceptors>
<interceptor name="autorizador"
class="br.com.jdbc.interceptor.AutorizadorInterceptor"/>
<interceptor-stack name="seguranca">
<interceptor-ref name="autorizador" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<global-results>
<result name="naoLogado">/WEB-INF/content/home_visitante.jsp</result>
</global-results>
</package>
CLASSE PARA TESTAR A INTERCEPTOR
package br.com.cfr.action;
import java.util.List;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.Result;
import br.com.cfr.jdbc.dao.SugestaoDAO;
import br.com.cfr.jdbc.modelo.Sugestao;
public class ListaSugestoesAction {
private List<Sugestao> sugestoes;
public void setSugestoes(List<Sugestao> sugestoes) {
this.sugestoes = sugestoes;
}
@Action(value="listaSugestoes", results = {
@Result(name="ok", location="sugestoes_reclamacoes_admin.jsp")
}, interceptorRefs={ @InterceptorRef("seguranca")})
public String execute() throws ClassNotFoundException {
sugestoes = new SugestaoDAO().lista();
return "ok";
}
public List<Sugestao> getSugestoes() {
return sugestoes;
}
}
CLASSE INTERCEPTOR
package br.com.jdbc.interceptor;
import br.com.cfr.jdbc.modelo.Usuario;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class AutorizadorInterceptor implements Interceptor {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init() {
// TODO Auto-generated method stub
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Usuario usuarioLogado = (Usuario)invocation.getInvocationContext().
getSession().get("usuarioLogado");
if (usuarioLogado == null) {
return "naoLogado";
}
return invocation.invoke();
}
}
Uma última pergunta. Pelo o que eu li parece que ele só irá interceptar actions seria isso ?
Porque eu gostaria que interceptasse jsp’s tbm …
Muito obrigado!
E o web.xml?
Bom, Struts 2 é action based, ou seja, toda requisição à uma jsp é uma ação.
Desta forma, você só consegue interceptar as actions, porém, como todo o controle das jsps está em cada action, é quase a mesma coisa.
Hm, mais então eu tenho que passar esta logica para o web.xml é isso?
Andou pulando algumas páginas da apostila?
Você precisa avisar o Struts 2 que existe uma requisição para algo que ele controla, no caso, as actions e os interceptors.
Caso contrário, o erro 404 - página/arquivo não encontrada(o) será exibido.
Deve haver, na apostila, alguma referência de como configurar o web.xml para usar o Struts 2.
Então eu tenho configurado o web.xml porém na apostila na parte de interceptor não fala nada sobre ele apenas o struts.xml… onde que estaria exatamente meu erro?
Para os interceptors, realmente, apenas struts.xml.
Mas, para que o engine do Struts 2 funcione, precisa sim, aliás, sempre configurar o web.xml com os dados do Struts 2.
É um requisito, afinal, dentro do ciclo de processamento de aplicativos java para a web, o container ou servidor somente irá ler o web.xml. Se não houver menção ao Struts 2, como ele será acionado?
Hm então eu tenho que add algo no web.xml para que ele possar ler o struts algo assim?
E como seria isso?
Pelo visto pulou várias páginas da apostila ou elas se perderam.
Certeza que tem essa configuração aí nas mãos e não procurou ainda.
Então eu estou procurando porém eu acho muito estranho o fato de na parte de interceptor ele não falar nada do web.xml…
Mais tudo bem vou continuar tentando me virar aqui vlw
[quote=JoaoMarques]Então eu estou procurando porém eu acho muito estranho o fato de na parte de interceptor ele não falar nada do web.xml…
Mais tudo bem vou continuar tentando me virar aqui vlw[/quote]
Camarada, sem a configuração do web.xml o Struts 2 não funciona.
É o mesmo que você querer que seu carro ande, sem dar a partida.
É no web.xml que o Struts 2 ficará sabendo que precisa intervir, tomar conta do processo.
Isso independe do que você terá, tags, actions ou interceptors, tudo depende do aviso que o web.xml dará ao Struts 2, da partida para o carro andar.
Isto eu entendi :).
O problema mesmo é fazer o web.xml pegar essa interceptor estou procurando aqui na apostila mais sem sucesso . 
[quote=JoaoMarques]Isto eu entendi :).
O problema mesmo é fazer o web.xml pegar essa interceptor estou procurando aqui na apostila mais sem sucesso . :/[/quote]
Infelizmente o guj não tem nenhuma maneira de se desenhar a resposta…
Você não vai por a p**** do interceptor no web.xml. Ele será utilizado quando a ação correspondente for acionada. Por isso é preciso criar o arquivo struts.xml dentro da pasta raiz do projeto (src).
Vamos tentar explicar passo a passo
1 - Requisição feita pelo cliente para a url http://localhost:8080/struts2interceptor
2 - O tomcat, que está habilitado para ouvir a porta 8080 do localhost recebe a requisição, procura algum projeto com o nome struts2interceptor.
Caso não encontre, devolve o erro 404.
Caso encontre, lê o web.xml e procede conforme o que está ali.
Caso o web.xml possua uma configuração de servlet ao Struts 2 é ele que irá dar o próximo passo, verificar na pasta src se existe o arquivo struts.xml.
Caso exista, ele irá assimilar as configurações ali presentes, dentre elas, as actions, results (location ou redirect), types e interceptors.
Não existindo o struts.xml, o framework assume o seu próprio como default e vai caçar anotações nas classes.
Se ele encontrar uma anotação @Action cujo atributo value corresponda à action em questão, ele irá executar o método correspondente e proceder com os passos normalmente.
Senão, devolve o erro 404, também.
Como você criou e inseriu no arquivo struts.xml a configuração do interceptor, é quando o tomcat “deixa” a cargo do Struts 2 que ele será identificado e os métodos dele serão executados quando a ação relacionada for chamada, seja no início ou ao fim da mesma.
Ficou mais claro?