Struts 2 - Usar os interceptor com excludeMethods

Galera, estou fazendo alguma besteira pois criei um interceptor que extende “AbstractInterceptor” e o defini no topo da pilha de execução definindo que determinado método não será executado por aquele interceptor.

Mas, ao chamar o método, o interceptador entra em ação e não sei o por quê!

Segue o código de configuração:

<struts>
	<package name="pkgQualquer" extends="struts-default"	namespace="/pkgQualquer">

		<interceptors>
			<interceptor name="exceptionInterceptor" class="Excpetion" />
            <interceptor name="outroQualquer" class="OutroQualquer" />
			<interceptor name="InterceptorQueEstaComProblemas" class="MeuInterceptorComProblemas" />

			<interceptor-stack name="meuStack">
				<interceptor-ref name="InterceptorQueEstaComProblemas">
					<param name="excludeMethods">fazQualquerCoisa</param>
				</interceptor-ref>
                <interceptor-ref name="outroQualquer" />
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="exceptionInterceptor" />
 
	    	</interceptor-stack>
		</interceptors>

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

		<global-results>
			<result name="login">/login.jsp</result>
			<result name="error">/erro.jsp</result>
		</global-results>

		<action name="fazQualquerCoisa" method="fazQualquerCoisa" class="QualquerClasse">
			<result name="success" >/qualquerResultado.jsp</result>
		</action>
	</package>
</struts>	

Ao chamar a ação “fazQualquerCoisa” ele entra no interceptor InterceptorQueEstaComProblemas…

o que eu estou fazendo de errado?

valew!

[quote=juloko666]Galera, estou fazendo alguma besteira pois criei um interceptor que extende “AbstractInterceptor” e o defini no topo da pilha de execução definindo que determinado método não será executado por aquele interceptor.

Mas, ao chamar o método, o interceptador entra em ação e não sei o por quê!
Segue o código de configuração:
[/quote]

Seu interceptador deve estender com.opensymphony.xwork2.interceptor.MethodFilterInterceptor e não AbstractInterceptor como foi feito.

public class NovoInterceptor extends MethodFilterInterceptor {

	private static final long serialVersionUID = 2451021640004063591L;

	protected String doIntercept(ActionInvocation arg0) throws Exception {
                System.out.println("Interceptado");
		return arg0.invoke();
	}

}

Desta forma você pode usar o parametro excludeMethods.

 <interceptor-ref name="InterceptorQueEstaComProblemas">  
                     <param name="excludeMethods">fazQualquerCoisa</param>  
  </interceptor-ref>  

Oi, estou com o mesmo problema! Tentei fazer o que vc sugeriu mas o excludeMethod não funciona!

Alguma idéia do que pode ser? Não dá erro, mas não chama o método que eu gostaria.

Obrigada!

Com o excludeMethod vc diz qual método NÃO será interceptado…Eu fiz a alteração que o bombbr falou e funcionou perfeitamente.

Poste o código para eu tentar te ajudar!

Abraços!

Meu problema é o seguinte:
O usuário só pode usar o sistema normalmente depois que trocar a senha. Então, preciso que o interceptor filtre tudo, exceto esse método que vai trocar a senha.
Mas ele não tá entrando no método trocarSenha.

Segue o código do struts.xml:

[code]

	<interceptors>
		<interceptor name="login" class="pacote.LoginInterceptor"></interceptor>
		<interceptor-stack name="xxxInterceptors">
       		<interceptor-ref name="login"><param name="excludeMethods">trocarSenha</param></interceptor-ref>
       		<interceptor-ref name="basicStack"/>
    	</interceptor-stack>
	</interceptors>

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

    <global-results>
        <result name="primeiroAcesso"  type="redirect">/usuario/alterarSenhaInicial.jsp</result>
    </global-results>

    <action name="alterarSenhaInicial" method="alterarSenhaInicial" class="pacote.AlterarSenhaAction">
        <result>/usuario/alterarSenhaInicial.jsp</result>
    </action>
    <action name="trocarSenha" method="trocarSenha" class="pacote.AlterarSenhaAction">
        <result>/usuario/alterarSenhaInicial.jsp</result>
    </action>
    <action name="logout" method="logout" class="pacote.BaseAction">
       	<interceptor-ref name="basicStack"/>            
        <result>/login.jsp</result>
    </action>
    <action name="home" method="home" class="pacoteBaseAction">
        <result>/jsp/home.jsp</result>
    </action>
    
</package>[/code]

Meu interceptor extend MethodFilterInterceptor:

public class LoginInterceptor extends MethodFilterInterceptor {

Tem idéia de onde estou errando?

Obrigada!!!