Caros,
Já pesquisei em alguns posts semelhantes, documentação do struts2, em vários blogs e apostilas de referência(inclusive caelum) mas não obtive resultado nenhum em usar o conceito de interceptors. Já estou ficando mesmo desesperado.
A idéia e usar o interceptor inicialmente pra bloquear acesso nao autorizado numa página de listagem de chamados.
Com intuito de registrar o usuário na sessão eu
tenho uma página de login.jsp
<form action="login" method="get">
<label>Login</label>
<input type="text" name="usuario.login"/>
<br/>
<label>Senha</label>
<input type="password" name="usuario.senha"/>
<br/><input type="submit" value="Logar"/>
</form>
Que me leva a essa Action:
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private Usuario usuario;
@Action(value="login",results={
@Result(name="ok",location="/index.jsp"),
@Result(name="invalido",location="/login.jsp")}
)
public String execute(){
if(new ChamadoDAO().verificaU(usuario) ){
ActionContext.getContext().getSession().put("usuarioLogado", usuario);
return "ok";
}else{
return "invalido";
}
}
public Usuario getUsuario(){
return usuario;
}
public void setUsuario(Usuario usuario){
this.usuario = usuario;
}
}
Daí criei esse Interceptor
public class AutorizadorInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
Usuario usuario = new Usuario();
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Usuario usuarioLogado = (Usuario)invocation.getInvocationContext().
getSession().get("usuarioLogado");
if(usuarioLogado==null){
return "naoLogado";
}else{
return invocation.invoke();
}
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init() {
// TODO Auto-generated method stub
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}
Agora vem a dúvida de como ficaria meu arquivo web.xml:
Tentei referenciar minhas actions através do init-param(vi isso em algum post)
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>packageaction</param-name>
<param-value>action</param-value>
</init-param>
</filter>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
Abaixo meu arquivo struts.xml que tá no src do projeto:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="my-default" extends="struts-default">
<interceptors>
<interceptor name="autorizador"
class="action.interceptor.AutorizadorInterceptor" />
<interceptor-stack name="defaultLoginStack">
<interceptor-ref name="servlet-config" />
<interceptor-ref name="params" />
<interceptor-ref name="autorizador" />
<interceptor-ref name="prepare" />
<interceptor-ref name="chain" />
<interceptor-ref name="model-driven" />
<interceptor-ref name="fileUpload" />
<interceptor-ref name="static-params" />
<interceptor-ref name="params" />
<interceptor-ref name="conversionError" />
<interceptor-ref name="validation" />
<interceptor-ref name="workflow" />
</interceptor-stack>
</interceptors>
<global-results>
<result name="invalido">/login.jsp</result>
<result name="ok">/index.jsp</result>
</global-results>
</package>
</struts>
A idéia é bloquear acesso nao autorizado(inicialmente) dessa lista de chamados:
@ParentPackage("my-default")
public class ListaChamadosAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private List<Chamado> listaChamados;
@Action(value="listaChamados", results={
@Result(name="ok",location="/lista_chamados.jsp")
},interceptorRefs ={ @InterceptorRef("autorizador")
})
public String execute(){
listaChamados = new ChamadoDAO().listaChamados();
//ActionContext.getContext().getSession().put("listaChamados",listaChamados);
return "ok";
}
public List<Chamado> getListaChamados() {
return listaChamados;
}
}
Agradeço qualquer ajuda,
abraços!