Gravando uma sessão

10 respostas
robson_vs

como faço para gravar um login em uma sessão para depois usar no meu filter???

10 Respostas

andgonca

Assim:

HttpSession session = httpRequest.getSession(); //httpRequest recebido como parametro no método
session.setAttribute("username", username);

[]s

robson_vs

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() {
	}
}
andgonca

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

robson_vs

ñ 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.

andgonca

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

robson_vs

eu tinha tentado no meu managedbean pois estou usando jsf mais ñ rolou quer dar uma olhada nele???

andgonca

Manda

robson_vs
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;
	}
}
andgonca

Então: nem aqui você atribui nada a Session. Nem deveria. Isso é trabalho para o controller. Verifique lá.

[]s

robson_vs

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";
				}
Criado 4 de outubro de 2006
Ultima resposta 5 de out. de 2006
Respostas 10
Participantes 2