Strust 2 + Tiles + Session + Interceptor

3 respostas
S

Olá a todos!
Estou desenvolvendo uma aplicação que para acessar determinados links é necessário logar. Sem novidades até ai. Estou utilizando Struts2 + Tiles + Session + Interceptor.

Estou em dúvida pois o interceptor que criei ora bloqueia tudo hora libera tudo. Estou precisando de ajuda para resolver esse conflito e me indicarem se do modo que estou fazendo é o correto.

Segue o código:

<struts>   
	<package name="default" extends="struts-default">
		<result-types>
			<result-type name="tiles"
				class="org.apache.struts2.views.tiles.TilesResult"/>
		</result-types>
		
		<interceptors>
			<interceptor name="session" class="com.vaannila.action.SessionCheck" />
				<interceptor-stack name="sessionExpirayStack">
	    			<interceptor-ref name="defaultStack"/>
	    			<interceptor-ref name="session"/>       		  				
	   			</interceptor-stack>	
		</interceptors>		
			
		<default-interceptor-ref name="sessionExpirayStack" />
			  	   
		<action name="*Link" method="{1}" class="com.vaannila.action.LinkAction">
			<interceptor-ref name="defaultStack" />
			<result name="baseLayout" type="tiles">baseLayout</result>
			<interceptor-ref name="session">
				<param name="excludeMethods">baseLayout</param>
			</interceptor-ref>				
			<result name="welcome" type="tiles">welcome</result>
			<result name="friends" type="tiles">friends</result>
			<result name="office" type="tiles">office</result>
		</action>
		<action name="Logar"
			class="com.vaannila.action.LogarAction">
			<result name="success" type="tiles">welcome</result>
			<result name="error" type="tiles">erro</result>
		</action>
	</package>
</struts>
Fiz uma lambança danada ai.

A classe interceptor:

public class SessionCheck implements Interceptor {
	private static final long serialVersionUID = 1L;

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void init() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		ActionProxy proxy;
		proxy = invocation.getProxy();
		Map<String, Object> session = ActionContext.getContext().getSession();
		Map results = proxy.getConfig().getResults();
		
		if (session.get("logined") != null) {
			return invocation.invoke();
		}
		return null;
	}

}

Obrigado!

3 Respostas

S

Up

drsmachado

Camarada, leia as regras do forum.
Uma vez postado o topico, aguarde pelas respostas.
Atitudes como esta não ajudam em nada e, até mesmo, afastam possíveis respostas.

S

Consegui dessa forma:

<interceptors>         
         	<interceptor name="session" class="com.vaannila.action.SessionCheck"/>         
         	<interceptor-stack name="stackGeral">
            	<interceptor-ref name="session"/>
            	<interceptor-ref name="defaultStack"/>
         	</interceptor-stack>     
      	</interceptors>      

      <default-interceptor-ref name="defaultStack"/>
            
      <global-results>
         <result name="logon" type="tiles">baseLayout</result>
      </global-results>
		
		
		<action name="*Link" method="{1}" class="com.vaannila.action.LinkAction">
			<interceptor-ref name="defaultStack"></interceptor-ref>
			<result name="baseLayout" type="tiles">baseLayout</result>
			<interceptor-ref name="session"></interceptor-ref>
			<result name="welcome" type="tiles">welcome</result>
			<result name="friends" type="tiles">friends</result>
			<result name="office" type="tiles">office</result>
		</action>

Acho q tava faltando também um retorno de erro no interceptador, ficou assim:

public String intercept(ActionInvocation invocation) throws Exception {
		ActionProxy proxy;
		proxy = invocation.getProxy();
		Map<String, Object> session = ActionContext.getContext().getSession();
		Map results = proxy.getConfig().getResults();
		
		if (session.get("logined") != null) {
			return invocation.invoke();
		}
		return "logon";
	}

Obrigado e desculpem o ato falho.

Criado 8 de março de 2012
Ultima resposta 8 de mar. de 2012
Respostas 3
Participantes 2