como faço para gravar um login em uma sessão para depois usar no meu filter???
Gravando uma sessão
10 Respostas
Assim:
HttpSession session = httpRequest.getSession(); //httpRequest recebido como parametro no método
session.setAttribute("username", username);
[]s
Então cara o negócio é o seguinte eu estou tentando fazer um filtro para restringir acesso a algumas páginas só q ele funciona de primeiro momento e depois ñ rola ñ estou conseguindo consertar achei q era algo a ver co a sessão
public class LoginFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpSession session = ((HttpServletRequest) req).getSession();
Funcionario funcionario = (Funcionario) session
.getAttribute("funcionario");
session.getAttribute("funcionario");
if (funcionario == null) {
((HttpServletResponse) res).sendRedirect("../index.jsp");
} else {
session.setAttribute("funcionario", funcionario);
chain.doFilter(req, res);
}
}
public void destroy() {
}
}
Deixa ver se eu entendi:
Na primeira vez que o filtro é executado, funciona, ou seja, redireciona para a index.jsp, certo?
A partir da segunda vez, o filtro permite acesso às páginas que não deveria permitir, isto é, não redireciona para index.jsp, ok?
Se for isso, quer dizer que o fluxo vai pro else do if que verifica se funcionario é nulo, ou seja: funcionario não é nulo.
Como funcionario está na sessão (ambiente pouco confiável, diga-se de passagem) qualquer outra classe pode ter atribuido outro objeto a funcionario, fazendo com que ele deixe de ser nulo.
Pode ser isso.
[]s
ñ na verdade é o seguinte o filtro só funciona se eu vier da classe login assim q eu efetuo o login caio na tela correta até ai beleza mais se clicar em algum link ou botão desta classe ou de lá tentar ir para qualquer outra página restrita ele cai direto no index pois o funcionario fica sermpe null ñ estou entendendo o pq.
Pelo que eu vi, o funcionario é sempre null porque você não o cria em nenhum momento. Pelo menos no trecho de código que você passou.
O único ponto em que você atribui algo para a sessão é no else do if que verifica se ele é nulo.
Você atribui funcionario para a sessão em alguma outra classe?
[]s
eu tinha tentado no meu managedbean pois estou usando jsf mais ñ rolou quer dar uma olhada nele???
Manda
package br.com.greenline.falegreen.managedbean;
import java.util.List;
import javax.faces.event.ActionEvent;
import org.apache.myfaces.component.html.ext.HtmlSelectOneMenu;
import br.com.greenline.falegreen.delegate.FuncionarioDelegate;
import br.com.greenline.falegreen.model.Departamento;
import br.com.greenline.falegreen.model.Funcionario;
public class FuncionarioBean {
private Funcionario funcionarioVO = new Funcionario();
private String action;
private HtmlSelectOneMenu departamentoSelecionado;
public String logar(ActionEvent event) {
action = null;
if (action == null) {
String usuario = funcionarioVO.getUsuario();
String senha = funcionarioVO.getSenha();
System.out.println(usuario);
System.out.println(senha);
if (usuario.equals(getLogin(usuario))) {
if (senha.equals(getSenha(usuario))) {
action = "success";
} else {
action = "senhaErrada";
}
} else {
action = "usuarioErrado";
}
} else {
action = "failure";
}
System.out.println("action->" + action);
return action;
}
public String action() {
return action;
}
@SuppressWarnings("unused")
private String getLogin(String usuario) {
String user = null;
for (Funcionario funcionario : listar(usuario)) {
user = funcionario.getUsuario();
System.out.println(user);
}
return user;
}
@SuppressWarnings("unused")
private String getSenha(String usuario) {
String senha = null;
for (Funcionario funcionario : listar(usuario)) {
senha = funcionario.getSenha();
System.out.println(senha);
}
return senha;
}
@SuppressWarnings("unchecked")
public List<Funcionario> listar(String usuario) {
FuncionarioDelegate funcionarioDelegate = new FuncionarioDelegate();
List list = funcionarioDelegate.listar(usuario);
return list;
}
public void incluirFuncionarios() {
String action = null;
System.out.println("Executando o metodo incluirFuncionario da classe "
+ FuncionarioBean.class + " resultado: ");
if (action == null) {
FuncionarioDelegate funcionarioDelegate = new FuncionarioDelegate();
Long id = Long.parseLong(departamentoSelecionado.getValue()
.toString());
Departamento departamento = new Departamento();
departamento.setIdentificador(id);
funcionarioVO.setDepartamento(departamento);
funcionarioDelegate.salvar(funcionarioVO);
action = "success";
System.out.print("Funcionário: " + funcionarioVO.getNome()
+ " Incluido com sucesso");
funcionarioVO = new Funcionario();
} else {
action = "failure";
}
}
public Funcionario getFuncionarioVO() {
return funcionarioVO;
}
public void setFuncionarioVO(Funcionario funcionarioVO) {
this.funcionarioVO = funcionarioVO;
}
public HtmlSelectOneMenu getDepartamentoSelecionado() {
return departamentoSelecionado;
}
public void setDepartamentoSelecionado(
HtmlSelectOneMenu departamentoSelecionado) {
this.departamentoSelecionado = departamentoSelecionado;
}
}
Então: nem aqui você atribui nada a Session. Nem deveria. Isso é trabalho para o controller. Verifique lá.
[]s
mais este é o meu controller
veja q eu fiz agora
if (usuario.equals(getLogin(usuario))) {
if (senha.equals(getSenha(usuario))) {
action = "success";
HttpServletRequest request = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext()
.getRequest();
HttpSession session = request.getSession();
session.setAttribute("usuario", usuario);
//HttpServletRequest request=null;
//request.getSession().setAttribute("usuario",usuario);
} else {
action = "senhaErrada";
}