dúvida interceptors struts 2

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…

Vc não está verificando se o usuário está autenticado ANTES de autenticá-lo? Talvez vc precise utilizar esse interceptor em TODAS as telas MENOS a de login…

Já pensei nisso antes… repare que um dos da minha action loginAction é a página “home.jsp”, eu queria que o usuario fosse autenticado e verificado antes do acesso a esta pagina! Como faço intao já que se refere a action de login?

colocar o user na session ANTES do interceptor querer interceptar a action…

Mas como faço isso já que o interceptor executa seu código antes da execução da action? Colocando o usuario na session no proprio interceptor?

Uma dúvida: tem como configurar o interceptor p/ executar antes ou depois da action?

Faça o seguinte teste :

		<interceptors>
			 <interceptor name="loginInterceptor" class="net.sytes.tsda.zeusws.interceptor.LoginInterceptor" /> 
		
		
			<interceptor-stack name="defaultIdigitalStack" >
                <interceptor-ref name="exception"/>
                <interceptor-ref name="alias"/>
                <interceptor-ref name="servletConfig"/>
                 <interceptor-ref name="loginInterceptor"/>
                <interceptor-ref name="prepare"/>
                <interceptor-ref name="i18n"/>
                <interceptor-ref name="chain"/>
                <interceptor-ref name="debugging"/>
                <interceptor-ref name="profiling"/>
                <interceptor-ref name="scopedModelDriven"/>
                <interceptor-ref name="modelDriven"/>
                <interceptor-ref name="fileUpload"/>
                <interceptor-ref name="checkbox"/>
                <interceptor-ref name="staticParams"/>
                <interceptor-ref name="params">
                  <param name="excludeParams">dojo\..*</param>
                </interceptor-ref>
                <interceptor-ref name="conversionError"/>
                <interceptor-ref name="validation">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
                <interceptor-ref name="workflow">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
        	</interceptor-stack>
		
		</interceptors>

<default-interceptor-ref name="loginInterceptor" />

Herrera

[quote=Herrera]Faça o seguinte teste :

		<interceptors>
			 <interceptor name="loginInterceptor" class="net.sytes.tsda.zeusws.interceptor.LoginInterceptor" /> 
		
		
			<interceptor-stack name="defaultIdigitalStack" >
                <interceptor-ref name="exception"/>
                <interceptor-ref name="alias"/>
                <interceptor-ref name="servletConfig"/>
                 <interceptor-ref name="loginInterceptor"/>
                <interceptor-ref name="prepare"/>
                <interceptor-ref name="i18n"/>
                <interceptor-ref name="chain"/>
                <interceptor-ref name="debugging"/>
                <interceptor-ref name="profiling"/>
                <interceptor-ref name="scopedModelDriven"/>
                <interceptor-ref name="modelDriven"/>
                <interceptor-ref name="fileUpload"/>
                <interceptor-ref name="checkbox"/>
                <interceptor-ref name="staticParams"/>
                <interceptor-ref name="params">
                  <param name="excludeParams">dojo\..*</param>
                </interceptor-ref>
                <interceptor-ref name="conversionError"/>
                <interceptor-ref name="validation">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
                <interceptor-ref name="workflow">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
        	</interceptor-stack>
		
		</interceptors>

<default-interceptor-ref name="loginInterceptor" />

Herrera

[/quote]

ainda não funcionou kra! ainda nao reconhece os dados do formulario…

mas p/ q tantos interceptors?