Struts2

1 resposta
M

Olá.

Estou tentando utilizar Interceptors do Struts 2 (versão 2.0.14, usando annotations) para segurança do sistema. Ou seja, toda requisição deve passar por este interceptor onde será verificado se o usuario está logado e se tem permissão para excutar tal funcionalidade.

No entanto, está passando somente pelo método init do Inteceptor criado. Preciso passar pelo método intercept.

Não sei onde estou esquecendo de configurar para que todas as actions chamen o método intercept de AutorizacaoInterceptor. Poderiam ajudar?

Abaixo seguem os arquivos que estou utilizando.

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>   
<!DOCTYPE struts PUBLIC   
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  "http://struts.apache.org/dtds/struts-2.0.dtd">   
  
<struts>   
    <include file="struts-default.xml" />   
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />   
    <constant name="struts.devMode" value="false" />   
    <constant name="struts.locale" value="pt_BR" />   
    <constant name="struts.multipart.maxSize" value="2597152" />   
       
     <package name="default" extends="struts-default">   
    <interceptors>     
        <interceptor name="autorizacao" class="AutorizacaoInterceptor" />   
         <interceptor-stack name="demostack">     
                   <interceptor-ref name="autorizacao" />   
                   <interceptor-ref name="defaultStack" />     
        </interceptor-stack>     
    </interceptors>   
    <default-interceptor-ref name="demostack" />       
             
    </package>   
  
</struts>

AutorizacaoInterceptor.java

import javax.servlet.http.HttpServletRequest;   
import org.apache.struts2.ServletActionContext;   
import org.apache.struts2.config.Result;   
import org.apache.struts2.config.Results;   
import org.apache.struts2.dispatcher.SessionMap;   
import org.apache.struts2.views.tiles.TilesResult;   
import br.com.empresa.sistema.modelo.entity.Usuario;   
import com.opensymphony.xwork2.Action;   
import com.opensymphony.xwork2.ActionContext;   
import com.opensymphony.xwork2.ActionInvocation;   
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;   
  
@Results({   
    @Result(name="input",   value="login.page"     ,type=TilesResult.class)   
})   
public class AutorizacaoInterceptor extends AbstractInterceptor   
{   
    private static final long serialVersionUID = 4194206894614545639L;     
         
    public void init()
   {
         System.out.println("Estamos no metodo init do Interceptor");
    }     
     
    public String intercept(ActionInvocation invocation) throws Exception   
    {     
        SessionMap sessao = (SessionMap) ActionContext.getContext().get(ActionContext.SESSION);     
        Usuario usuarioAutenticado = (Usuario) sessao.get("usuarioAutenticado");   
           
        if(usuarioAutenticado != null)   
        {   
            System.out.println("Usuario autenticado");   
        }   
        else   
        {   
            System.out.println("Usuario não autenticado");   
            sessao.invalidate();   
            return Action.INPUT;   
        }   
           
        return invocation.invoke();     
    }     
  
    public void destroy() {}     
}

1 Resposta

M

A única coisa que reparei que estou fazendo diferente de vários exemplos na Net é que estou utilizando
no Struts.xml.

Toda minha action está em annotations.

Se alguém tiver alguma idéia … posta aê.

Criado 3 de agosto de 2009
Ultima resposta 3 de ago. de 2009
Respostas 1
Participantes 1