Usuário logado no Spring Securty?

10 respostas
juniorsatanas

Pessoal estou usando Spring Security + Vraptor , eu tenho um usuário logado no sistema, gostaria de por o usuário logado na sessão na página :

<c:if test="${userSession.logged}">
					[ Bem vindo <strong>${userSession.currentUser.name}</strong> ]
					<a /users/${userSession.currentUser.id}" />&quot;&gt;Minha Conta</a>
					<a /orders" />&quot;&gt;Meus Pedidos</a>
					<a /users/logout" />&quot;&gt;Logout</a>
				&lt;/c:if&gt;
				&lt;c:if test="${empty userSession or not userSession.logged}"&gt;
					<a /users/register" />&quot;&gt;Cadastrar</a>
					<a /users/login" />&quot;&gt;Login</a>
				&lt;/c:if&gt;

alguém sabe como faço isso ?

meu usuarioDao.java
package ce.gov.nutec.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;

import br.com.caelum.vraptor.ioc.Component;

import ce.gov.nutec.model.Usuario;

@Component
public class UsuarioDao {

	private final Session session;

	public UsuarioDao(Session session){
		this.session = session;
	}

	@SuppressWarnings("unchecked")
	public List&lt;Usuario&gt; lista(String uf){
        System.out.println("listou Usuarios");
		return session.createCriteria(Usuario.class)
				.add(Restrictions.ilike("uf", uf, MatchMode.ANYWHERE))
				.list();
	}

	@SuppressWarnings("unchecked")
	public List&lt;Usuario&gt; listaTudo(){
        System.out.println("listou TUDO");
		return this.session.createCriteria(Usuario.class).list();
	}

    }
usuarioController.java
package ce.gov.nutec.controller;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;

import br.com.caelum.vraptor.Validator;
import ce.gov.nutec.dao.UsuarioDao;
import ce.gov.nutec.model.Usuario;
import java.util.List;

@Resource
public class UsuarioController {
    private final UsuarioDao dao;
    private final Result result;
    private final Validator validator;

    public UsuarioController(UsuarioDao dao,
                               Result result,
                               Validator validator) {
        this.dao = dao;
        this.result = result;
        this.validator = validator;

    }
    @Path("/usuario")
    public void index() {
    }
    /*
     @Path("/usuario/formulario")
    public void formulario() {
    }
    */
    @Get @Path("/usuario/todos")
    public List&lt;Usuario&gt; lista(){
        System.out.println("==========================LISTOU TODOS USUARIOS=======================");
        return dao.listaTudo();
    }

}
usuario.java
package ce.gov.nutec.model;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
//@Table(name = "acompanhamento_pd", catalog = "nutec", schema = "sigi")
public class Usuario implements Serializable {

	@Id @GeneratedValue
	private Long id;
	private String nome;
	private String senha;

	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getUf() {
		return senha;
	}
	public void setUf(String uf) {
		this.senha = uf;
	}

}

10 Respostas

Lucas_Cavalcanti

getter/setter no UserSession?

Guevara

Eu aqui coloquei no header da Home:

<sec:authorize ifNotGranted="ROLE_ANONYMOUS">
		Ol&aacute; <%= request.getUserPrincipal().getName() %>
		<a href="<c:url value="/j_spring_security_logout"/>">Logout</a>
		</sec:authorize>

Só isso…

juniorsatanas
# &lt;sec:authorize ifNotGranted="ROLE_ANONYMOUS"&gt;  
#         Olá &lt;%= request.getUserPrincipal().getName() %&gt;  
#         <a /j_spring_security_logout"/>&quot;&gt;Logout</a>  
#         &lt;/sec:authorize&gt;

Esse : request.getUserPrincipal().getName() e o Spring Security ! ?

Guevara

Não, é do http request. Mas têm como pegar pelo Spring Security tb, já vi isso no fórum do Spring Security…

juniorsatanas

Guevara Boa Tarde !

Teu sistema pega o usuário logado e Seta ele no banco ?
To apanhando para fazer isso, pois meu sistema usa o Spring Security, e todo usuario logado tem que ser setado no banco…

jr

B

Cara, eu estou com o mesmo problema.

A minha aplicacao deve pegar o username, o password e o session id e gravar na base de dados.

Andei pesquisando por ai, para saber se é possivel pegar o session id pelo spring, mas infelizmente nao vi algo de concreto. Falam de listeners que escutam o httprequest e depois devo pegar o session di de la, mas nao entendi como posso fazer isso.

Quero saber se é possivel instanciar um bean do spring que me devolva o session id, porque preciso pegar em muitos siios e não pretendo instanciar sempre que queria pegar o session id.

Ajudem-me é urgente.

Lucas_Cavalcanti

pior dos casos vc pode receber uma HttpSession e dar um getId() nela

B

Lucas, valei pela dica, mas não quero estar a instanciar o httpsession em todas as paginas *.zul onde eu quero pegar o session Id, eu quero instanciar um bean através do spring e ai eu terei acesso ao session id sempre que eu quiser.

O problema é que eu não percebo como poderei fazer isso com o spring, será que é possivel? Alias eu acho que sim, eu vi uma class WebAuthenticationDetails mas esta classe necessita de um HttpServletRequest isso no construtor, e eu não sei como pegar o HttpServletRequest através de um bean

Lucas_Cavalcanti

vc não vai instanciar o HttpSession, vc vai receber como dependência…

vc pode criar um bean/component seu que faz isso e tem um getSessionId

B

Não há uma maneira mais simples de pegar o session id através do spring?

Acho que eu é que não expliquei bem que quero. É o seguinte:

Pelo que percebi, quando alguém acede a aplicação, é enviado um request para o servidor, e antes de se carregar a aplicação ele vai ler os ficheiros de configuração web.xml e webConten-spring.xml para o meu caso.

Então, ai eu quero pegar o session id através de um bean do spring para que possa ter acesso ao longo de todo o escopo da aplicação.

Desculpe a minha ignorância mas estou meio confuso, comecei com o spring a pouco tempo.

Encontrei esse código que delega os httprequests para o spring

springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy

Apartir daí, tem como eu pegar o session id?

Pode me indicar um site onde possa ler e entender o funcionamento do spring duma vez por todas, se fav favor?

Obrigado.

Criado 8 de dezembro de 2010
Ultima resposta 10 de out. de 2011
Respostas 10
Participantes 4