Dúvida Interceptor

9 respostas
Chuvinha

Galera, estou com uma dúvida no interceptor.
Preciso colocar ele pra todas as minhas actions.
Por enquanto, só coloquei pra home.
Daí, quando o usuário não estiver logado e tentar entrar na home será direcionado pra página de login.

<!-- Configuration for the default package. -->
	<package name="default" extends="struts-default">
		<interceptors>
			<interceptor name="autorizador"	class="br.com.repdigital.interceptor.AutorizadorInterceptor"></interceptor>
			<interceptor-stack name="loggingStack">
				<interceptor-ref name="autorizador" />
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
		</interceptors>
		
		<global-results>
			<result name="naoLogado">/index.jsp</result>
		</global-results>
	</package>

	<!-- Configuration for the module package. -->
	<package name="modulos" extends="default">

		<default-action-ref name="home" />

		<!-- Home: displays the home page. -->
		<action name="home">
			<interceptor-ref name="loggingStack"></interceptor-ref>
			<result>/WEB-INF/pages/home.jsp</result>
		</action>
	</package>

Gostaria de saber se existe uma maneira de colocar o interceptor pra todas as minhas actions.
Senão terei que colocar a configuração pra todas as minhas actions.
Alguém sabe uma maneira de configurar apenas uma vez?

9 Respostas

jyoshiriro

Basta colocar a tag

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

Após , ok?

Chuvinha

Tá dando outro erro

Chuvinha

Putz cara, achei que tivesse funcionado, mas tá dando pau.
Todas urls que eu digito cai na página de login, isto funcionou.
Porém, tento fazer login e não funciona.
Ele volta pra página de login.
Abaixo está meu código:

<package name="default" extends="struts-default">
		<interceptors>
			<interceptor name="autorizador"	class="br.com.repdigital.interceptor.AutorizadorInterceptor"></interceptor>
			<interceptor-stack name="loggingStack">
				<interceptor-ref name="autorizador" />
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
		</interceptors>
		
		<default-interceptor-ref name="loggingStack" />
		
		<global-results>
			<result name="naoLogado">/index.jsp</result>
		</global-results>
	</package>

	<!-- Configuration for the module package. -->
	<package name="modulos" extends="default">
		<default-action-ref name="home" />

		<!-- Home: displays the home page. -->
		<action name="home">
			<result>/WEB-INF/pages/home.jsp</result>
		</action>	
</package>

O que será que está errado?

jyoshiriro

Simples… a tela de login deve ser imune ao interceptor de autenticação. Afinal, não precisa estar autenticado para se autenticar :wink:

Faça seu interceptor de autenticação não passar pelo seu interceptor responsável pela verificação de usuário já autenticado.

Chuvinha

Putz, eu não sei fazer isso.
Vc tem algum exemplo?

jyoshiriro

Estás mapeando tuas actions via XML ou annotations?

Chuvinha

Via XML mesmo

jyoshiriro

Então no mapeamento de autenticação faça assim:

<action name="xxx"> <interceptor-ref name="defaultStack"/> <result>/WEB-INF/pages/xxxx.jsp</result> </action>

Chuvinha

Entendi.
Legal, funcionou aqui.
Obrigado Yoshiro =))

Abraço

Criado 3 de novembro de 2010
Ultima resposta 4 de nov. de 2010
Respostas 9
Participantes 2