Pessoal boa noite, desculpe o título do tópico, o que acontece e que fiz um sistema de login com struts 2 e hibernate 3. Bom tudo esta funcionando , menos a sessão, preciso registar a sessao com um objeto usuario e obter ela nas outras páginas.
Pesquisei muito e achei algumas dicas, mas coisas picadas, nada que conseguisse implementar. Li sobre SessionAware, os interceptors do struts 2 e gostaria de uma ajuda se possível.
Gostaria de saber como crio a sessão usando SessionAware, recupero e intercepto ela somente nas páginas que quero.
Tenho minha classe locar que extende a ActionSupport e nela valido o usuario vejam:
public class Loga extends ActionSupport {
private String nome;
private String senha;
public String execute() {
validate();
Usuario user = new Usuario();
user.setUsuario(getNome());
user.setSenha(getSenha());
if (user.ValidaUsuario() == true) {
//aqui devo registrar a sessao
//-----
addActionMessage("Login efetuado");
return "success";
} else {
addActionError("Usuário ou senha inválido");
return "error";
}
}
...
Opa mauricio bom esta dando certo, arrumei um problema e criei outro hauhaaa.
Está funcionando agora, redirecionando para a página de login, mas agora a validação do formulario não funciona, e não está recebendo os valores dos campos do formulario:
veja como fiz:
gravei a session:
public class Loga extends ActionSupport implements SessionAware,DisableLogin{
Map session;
private String nome;
private String senha;
public String execute() {
validate();
Usuario user = new Usuario();
user.setUsuario(getNome());
user.setSenha(getSenha());
if (user.ValidaUsuario() == true) {
//grava usuario na session
session.put("user",user);
criei o interceptor para o login:
[code]
public class LoginInterceptor implements SessionAware,Interceptor{
private Map session;
public void setSession(Map session) {
this.session = session;
}
public void destroy() {
}
public void init() {
}
public String intercept(ActionInvocation invocation) throws Exception {
Action action = (Action) invocation.getAction();
if(action instanceof DisableLogin) {
return invocation.invoke();
}else{
ActionContext ac = null;
Usuario user = (Usuario) ac.getContext().getSession().get("user");
if(user == null){
return "login";
}
}
return invocation.invoke();
}
Não sei se é o correto mas foi o que achei pesquisando na web.
So tem mais um problema, como bloqueio acesso aos JSP?
Obrigado pela ajuda, pra gente como eu que está começando agora com Java e web não é facil :roll: muitos conceitos a estudar, mas devagar chegamos la.
Abraços
O erro da validação so da quando usa o interceptor, esta solução ai foi postada inclusive por outros usuários aqui do fórum, e foi o que achei na web.
Agora so tenho que saber como bloquear acesso aos jsp.
Mais um detalhe: estou usando:
ActionContext.getContext().getSession().clear();
para limpar a sessão. Funciona mas está correto isso?