Boa tarde pessoal, tenho algumas duvidas sobre o vraptor, vamos lá:
Bom quando eu utilizo a anotação @SessionScoped, seria para que o objeto ficasse disponível em toda a session?
Como faço para pegar esse objeto da session em um interceptor?
Exemplo: usuário quando loga no sistema, quero que ele fique disponível em toda a sessão e só deixe de existir quando o usuário fizer o logoff, preciso disso para ter rastreabilidade das ações do usuário, como por exemplo quem foi o ultimo a atualizar determinada informação, etc.
Não tenho muita ideia de como fazer isso com o Vraptor, mas comecei a fazer umas classe:
Classe do Usuario
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;
@Component
@SessionScoped
public class Usuario {
private String re;
private String senha;
private String nome;
private int tipo;
public String getRe() {
return re;
}
public void setRe(String re) {
this.re = re;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getTipo() {
return tipo;
}
public void setTipo(int tipo) {
this.tipo = tipo;
}
public boolean isNull() {
if (this.re.equals("")) {
return true;
} else {
return false;
}
}
Classe LoginController
import javax.servlet.http.HttpSession;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.view.Results;
import br.com.cmc.dao.UsuarioDao;
import br.com.cmc.jdbc.ConnectionFactory;
import br.com.cmc.modelo.Usuario;
@Resource
public class LoginController {
private final HttpSession session;
private final ConnectionFactory conn;
private final Result result;
public LoginController(HttpSession session, ConnectionFactory conn, Result result) {
super();
this.session = session;
this.conn = conn;
this.result = result;
}
@Path("/logar")
public void logar (Usuario usuario) {
usuario = new UsuarioDao(this.conn.getConnectionMySql(), usuario).login();
if (usuario.isNull()) {
this.result.redirectTo(IndexController.class).root();
this.result.include("messag", "Usuario ou senha incorreta");
}else{
this.result.include("userLogado", usuario);
//this.result.include("conn", this.conn.getConnectionMySql());
if (usuario.getTipo() == 1){
this.result.forwardTo(AdminController.class).admin();
} else if (usuario.getTipo() == 2){
this.result.forwardTo(AtendController.class).atendente();
}
}
}
@Path("/logoff")
public void logOff() {
this.session.invalidate();
this.result.use(Results.logic()).redirectTo(IndexController.class).root();
}
Interceptor: Aqui gostaria de pegar o objeto usuário e verificar se existe, ai se existir continua, caso não retornar para o login, mas esse interceptor no pode intercepitar a minha primeira pagina que é a de login.
import javax.servlet.http.HttpSession;
import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.resource.ResourceMethod;
@Intercepts
@RequestScoped
public class AcessoIntercept implements Interceptor {
private final HttpSession session;
public AcessoIntercept(HttpSession session) {
this.session = session;
}
public boolean accepts(ResourceMethod arg0) {
return true;
}
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
stack.next(method, resourceInstance);
}
Obrigado pessoal