Alguém já conseguiu manter uma única session por login? ex: não permitir o mesmo usuário logar em outro navegador/desktop.
Alguém já conseguiu manter uma única session por login? ex: não permitir o mesmo usuário logar em outro navegador/desktop.
Boa tarde, Aline! Como vai?
A própria Alura pelo que já percebi implementa esse tipo de funcionalidade. O que vc pode fazer é o seguinte:
Quando o usuário fizer o login, faça o cadastro na sessão utilizando uma chave como por exemplo o email do usuário que está se autenticando. E crie um token que deverá ser trocado entre o cliente e o servidor a cada requisição. Dessa forma, quando vc tentar fazer login em outro computador/navegador, esse token não será enviado. Então vc mata a sessão que já existia, cria uma nova e tbm cria um novo token.
Isso fará com que a primeira sessão deixe de existir e na requisição seguinte, como o token estará inválido, terá que ser feito um novo login.
Pegou a ideia? Qualquer coisa é só falar!
Grande abraço e bons estudos!
ham tentei setar o id do usuário com o hash da session pra no filter comparar sessionFilter x sessionUsuario mas nao deu muito certo... =/
@WebServlet(urlPatterns = "/login")
public class Login extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
String email = req.getParameter("email");
String senha = req.getParameter("senha");
Usuario usuario = new UsuarioDAO().buscaPorEmailESenha(email, senha);
if(usuario == null) {
writer.println("<html><body>Usuário ou senha inválida.</body></html>");
}else {
HttpSession session = req.getSession();
session.setAttribute("usuarioLogado", usuario);//map
session.setAttribute("sessionUsuario", session);//map
@WebFilter(urlPatterns="/*")
public class FiltroDeAuditoria implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
HttpSession session = req.getSession();
HttpSession sessionUsuario = (HttpSession) session.getAttribute("sessionUsuario");
Usuario usuarioLogado = (Usuario) session.getAttribute("usuarioLogado");
String usuario = "<deslogado>";
String url = req.getRequestURL().toString();
if(url.contains("login")) {//silveira userLogado != null ||
System.out.println("Usuario Logado acessando a uri "
+ req.getRequestURI());
chain.doFilter(req, response);
}if(sessionUsuario != null) {
System.out.println("usuario LOGADO ");
usuarioLogado.setId(sessionUsuario.getId());
chain.doFilter(req, response);
if(session.isNew() && session.getId() != usuarioLogado.getId() ) {
System.out.println("sessao nova e já existe um usuario logado");
}
}
else {
System.out.println("Usuario DESLOGADO " + usuario + " acessando a uri "
+ req.getRequestURI());
req.getRequestDispatcher("/index.jsp").forward(req, response);
}