Pessoal estou usando o controle de usuário com Spring Security + Vraptor, está funcionando perfeitamente, eu consigo até pegar o usuário que está logado e mostrar ele no Formulário, ficou otimo, mas porém eu tenho uma tabela no meu banco chamado FUNCIONARIOS, cada usuário logado esta relacionado com essa tabela funcionario FK, logo eu preciso em todo sistema pegar o usuário logado e cadastrar em todas as tabelas, para saber qual usuário fez a devida modificação no sistema :
Exemplo:
tabela banco
id nome descricao usuruario_que_cadastrou
1 bbb banco 1
2 brasil banco 1
3 ccc banco 1
4 ddd banco 1
Esse campo usuruario_que_cadastrou seria o usuário logado no sistema:
ALGUÉM TEM IDÉIA COMO EU FAÇO ISSO ?
Em JSF eu dei uma pesquisada, pega-se o usuário corrente assim :Authentication authentication = (Authentication) SecurityContextHolder.getContext().getAuthentication();
if(authentication != null){
Object obj = authentication.getPrincipal();
if (obj instanceof Usuario){
return (Usuario) obj;
}
}
no meu DAO ta assim :
public void salva(Bancos bancos){
Transaction tx = session.beginTransaction();
bancos.setBancDataCadastrou(new Date());
bancos.setBancStatus("Ativo");
//Users.getUsername(); ****************** aqui eu tenho que fazer alguma coisa para pegar o usuário logado !
session.save(bancos);
tx.commit();
}
Parece Spring Security fornece uma (por segmento) "contexto" objeto a ser capaz de acessar o nome de usuário / info principal de qualquer lugar no seu aplicativo ...
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
... o que parece muito un-Spring como como esse objeto é um (global) Singleton, de certa forma.