olá pessal…
criei um interceptor p/ verificar se o usuario de encontra autenticado antes do acesso a qualquer recurso do sistema! Este interceptor eu defini como default, verifquem:
[code]<?xml version="1.0" encoding="UTF-8"?>
<include file="struts-default.xml" />
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="loginInterceptor" class="net.sytes.tsda.zeusws.interceptor.LoginInterceptor"/>
<interceptor-stack name="loginStack">
<interceptor-ref name="loginInterceptor"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="loginInterceptor" />
<global-results>
<result name="login" type="redirect">/index.jsp</result>
</global-results>
<action name="loginAction" class="net.sytes.tsda.zeusws.action.LoginAction">
<result name="invalid">/error_login.jsp</result>
<result name="valid">/home.jsp</result>
</action>
<action name="logoutAction" class="net.sytes.tsda.zeusws.action.LogoutAction">
<result name="success">/logout.jsp</result>
</action>
<action name="abrigoAction" class="net.sytes.tsda.zeusws.action.AbrigoAction">
<result name="success">/abrigos.jsp</result>
</action>
<action name="medidaAction!*" method="{1}" class="net.sytes.tsda.zeusws.action.MedidaAction">
<result name="success">/medidas.jsp</result>
</action>
</package>
[/code]
Após a criação desta interceptor, minha action de login não consegue capturar os dados do formulario informados na validacao! Não sei se é a forma que eu verifico se o usuario esta ou não autenticado no interceptor…
public class LoginInterceptor implements Interceptor
{
private static final long serialVersionUID = 1L;
public void destroy()
{
// TODO Auto-generated method stub
}
public void init()
{
// TODO Auto-generated method stub
}
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation arg0) throws Exception
{
// TODO Auto-generated method stub
Action action = (Action) arg0.getAction();
if(action instanceof SessionAware)
return arg0.invoke();
else
{
Usuario usuario = (Usuario) ActionContext.getContext().getSession().get("Usuario");
if(usuario == null)
return "login";
}
return arg0.invoke();
}
}
A validação do usuario eu faço na action LoginAction:
public class LoginAction extends ActionSupport implements SessionAware
{
private static final long serialVersionUID = 1L;
private Usuario usuario;
private DaoFactory daoFactory;
private UsuarioLogic usuarioLogic;
Map<String, Object> session;
@SuppressWarnings("unchecked")
public String execute()
{
if(this.findUser())
{
session = ActionContext.getContext().getSession();
session.put("Usuario", usuario);
return "valid";
}
return "invalid";
}
private boolean findUser()
{
this.daoFactory = new DaoFactory();
this.usuarioLogic = new UsuarioLogic(this.daoFactory);
return this.usuarioLogic.carrega(usuario);
}
public final Usuario getUsuario()
{
return usuario;
}
public final void setUsuario(Usuario usuario)
{
this.usuario = usuario;
}
@SuppressWarnings("unchecked")
public void setSession(Map session)
{
this.session = session;
}
@SuppressWarnings("unchecked")
public Map getSession()
{
return session;
}
}
Por algum motivo minha action parou de capturar estas informaçoes do formulario! Acho que é o interceptor, apesar de não saber se é a melhor forma de verificar a autenticação do usuario…