Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Login: Session, variável global ou Classe?

Recommended Posts

Login: Session, variável global ou Classe?


Pessoal, estou fazendo um sistema de cadastro de clientes e para que um administrador possa tratar um cliente ele precisará estar logado!


Acontece que estou na dúvida de como guardar seu logon de forma tal que fique à disposição em todo o sistema!


Então, eu fiz um formulário "Login e Senha" convencional enviando via Post os dados para um Servlet que vai chamar as consultas de existência e bloqueio de Administrador que estão em uma classe "Admin".


Tudo funciona corretamente.


Eis o servlet:


package controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import dao.admin.AutenticaAdmin;
import model.Admin;

@WebServlet("/LogonServlet")
public class LogonServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public LogonServlet() {
super();
}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
request.setCharacterEncoding("UTF-8");

String acao = request.getParameter("acao");
String login = request.getParameter("login");
String senha = request.getParameter("senha");

if (acao.equals("logar"))
{
AutenticaAdmin autenticaAdmin = new AutenticaAdmin();

Admin admin = autenticaAdmin.pesquisaAutenticaAdmin (login, senha);

if(admin!=null)
{
HttpSession sessao = request.getSession();

if(admin.getStatus().equals("d"))
{
sessao.setAttribute("admin", admin);
response.sendRedirect("admin/retornos/admin/loginOK.jsp");
}
else
{
sessao.setAttribute("nomeAdmin", admin.getNome());
response.sendRedirect("admin/retornos/admin/loginBloqueado.jsp");
}
}
else
{
response.sendRedirect("admin/retornos/admin/loginERRO.jsp");
}
}
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
request.setCharacterEncoding("UTF-8");

//HttpSession sessao = request.getSession();
//String acao = request.getParameter("acao");
}

}

A função abaixo retorna ou um Admin ou null.


autenticaAdmin.pesquisaAutenticaAdmin (login, senha);

O problema é que estou tendo problemas em testar nas páginas se o usuário sta autenticado ou não.

Se não, tranquilo, a própria servlet já redireciona. Mas caso o usuario navegue direto à página, preciso testar.

Então estou fazendo assim nas páginas .jsp


<%@ include file="../../../_global/sessoes.jsp"%>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ page import="model.Admin" %>
<%
if (session.getAttribute("admin")!=null)
{
Admin admin = (Admin) session.getAttribute("admin");
out.println("Olá "+admin.getNome());
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="../_global/_css/estiloSite.css" />
<title><%=tituloSiteAdmin %></title>
</head>
<body>

<div id="topo"> <jsp:include page="../_global/topoAdmin.jsp" /> </div>
<div id="meio"> <jsp:include page="principalConteudo.jsp" /> </div>
<div id="mapa"> <jsp:include page="../_global/mapaAdmin.jsp" /> </div>
<div id="creditos"> <jsp:include page="../_global/creditosAdmin.jsp" /> </div>

</body>
</html>
<% }
else
{
response.sendRedirect("index.jsp");
}
%>

Qual a melhor forma de fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Implemente um filtro para validação do usuário que iniciou a requisição. http://docs.oracle.com/javaee/6/api/javax/servlet/Filter.html

 

Nem me darei o trabalho de apresentar um exemplo porque na internet você acha um montão deles. Faça uma consulta na internet com os parâmetros "java servlet filter login".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, vou procurar sim.

 

Mas agora fiz várias modificações nos arquivos e depois quando fui rodar o tomcat não quer iniciar de jeito nenhum no Eclipse e a unica mensagem que dá é uma janelinha dizendo que o Tomcat falhou para iniciar.

 

O que pode ser?

 

O detalhe é que se eu startar o tomcat fora do Eclipse e starta e para normal

 

Se puder dar uma olhada, os fonte e o sql estão em

 

http://funerariasaopedro.net.br/imwsaogotardo.zip

Compartilhar este post


Link para o post
Compartilhar em outros sites
Ok. Resolvi o problema do servidor não startar. Era que estava dentro de uma servlet com nome de outra!


Agora o problema é o seguinte:


Estou seguindo esse tuto: http://uaihebert.com/autenticacao-de-usuarios-filterservlet/, daí, fiz o filtro igual, mas quando abro o site, ele já vai direto dano erro 404 na página principal!


Qual será o problema?


Eis o web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>imwsaogotardo</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>imwsaogotardo.src.controller.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/imwsaogotardo/AdminServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ProfessorServlet</servlet-name>
<servlet-class>imwsaogotardo.src.controller.ProfessorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ProfessorServlet</servlet-name>
<url-pattern>/imwsaogotardo/ProfessorServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SalaServlet</servlet-name>
<servlet-class>imwsaogotardo.src.controller.SalaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SalaServlet</servlet-name>
<url-pattern>/imwsaogotardo/SalaServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>UsuarioServlet</servlet-name>
<servlet-class>imwsaogotardo.src.controller.UsuarioServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UsuarioServlet</servlet-name>
<url-pattern>/imwsaogotardo/UsuarioServlet</url-pattern>
</servlet-mapping>

<filter>
<filter-name>LoginAdmin</filter-name>
<filter-class>imwsaogotardo.src.filter.admin.LoginAdmin</filter-class>
<init-param>
<param-name>loginActionURI</param-name>
<param-value>/imwsaogotardo/UsuarioServlet</param-value>
</init-param>
</filter>

</web-app>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certamente o seu filter está redirecionando pra uma página inexistente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eis o código:

 

package filter.admin; import java.io.IOException; import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession; import model.Admin; @WebFilter("/LoginAdmin")public class LoginAdmin implements Filter {private String LOGIN_ACTION_URI; public void init(FilterConfig fConfig) throws ServletException {// TODO Auto-generated method stubLOGIN_ACTION_URI = fConfig.getInitParameter("loginActionURI");}     public LoginAdmin()     {        // TODO Auto-generated constructor stub    } public void destroy() {// TODO Auto-generated method stub} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stub   HttpServletRequest req = (HttpServletRequest) request;       HttpSession session = req.getSession();       Admin admin = (Admin) session.getAttribute("admin");               if (admin == null && !LOGIN_ACTION_URI.equals(req.getRequestURI())){           RequestDispatcher rd = req.getRequestDispatcher("/login.jsp");           rd.forward(request, response);           return;       }               chain.doFilter(request, response); }}

Algo errado?

 

 

Aqui eu coloquei

 

<filter>    <filter-name>LoginAdmin</filter-name>    <filter-class>imwsaogotardo.src.filter.admin.LoginAdmin</filter-class> // Endereço do filtro    <init-param>        <param-name>loginActionURI</param-name>        <param-value>/imwsaogotardo/UsuarioServlet</param-value>       // O Servlet de login    </init-param></filter>

Aqui, no filtro, eu coloquei o endereço para onde esta o arquivo de login.

 

 

...public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stub   HttpServletRequest req = (HttpServletRequest) request;       HttpSession session = req.getSession();       Admin admin = (Admin) session.getAttribute("admin");               if (admin == null && !LOGIN_ACTION_URI.equals(req.getRequestURI()))       {           RequestDispatcher rd = req.getRequestDispatcher("/admin/index.jsp"); // site/admin/index.jsp é a página de login           rd.forward(request, response);           return;       }               chain.doFilter(request, response); }...

 

Gente, me ajuda.

 

Até hoje não consegui colocar o filtro para funcionar!

 

Basta colocar no xml e até pagina que existe ele diz que não existe!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.