Session – Login – Logout – Timeout – Java

Publicado: 26 de novembro de 2014 em Java

Tarefas de gerenciamento de sessão típicas incluem manter o controle de quais aplicativos estão abertos e documentar cada aplicativo que abriu, para que o mesmo estado possa ser restaurado quando o usuário sair e entrar novamente mais tarde. Você também pode utilizar a Session para criar áreas restritas de um website que podem ser acessadas pela sessão de um usuário, você também pode definir um tempo para que esta sessão fique ativa no navegador do usuário autenticado.

Para um site, gerenciamento de sessão pode envolver e exigir que o usuário reinicie sessão se a sessão expirou ou seja, se um certo limite de tempo passou sem a atividade do usuário. A sessão também é usada para armazenar informações no lado do servidor entre solicitações HTTP. Este tipo de conceito básico é o principio do esquema de autenticação utilizado por vários websites, entretanto a partir deste esquema básico pode-se criar métodos mais eficientes para utilizar este conceito.

Criando uma Sessão

GetSession

Retorna a sessão atual associado a este pedido, ou se o pedido não tem uma sessão, cria uma.

https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletRequest.html#getSession()

SetAttribute

Vincula um objeto para esta sessão, usando um nome especificado. Se um objeto do mesmo nome já está ligado à sessão, o objeto é substituído.

https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpSession.html

Utilizando Sessions – Login, Logout e Timeout

1 – Crie um projeto web dinâmico e os Servlets chamados Autenticar, SairAreaComunitaria, utilize o código abaixo para cada respectivo arquivo e rode a aplicação. Você pode tentar chamar a pagina AreaComunitaria sem utilizar o usuário e senha, digitando o nome do Servlet na url do navegador e constatará que não pode acessar a pagina devido a inexistência da sessão para seu usuário. Efetue o Login para criar a sessão:

Session - Login

Session – Login

2 – Assim que efetuar o login você será direcionado a área comunitária podendo então acessar a pagina da comunidade, caso clique no link sair, a sessão será invalidada e você será redirecionado para a tela de login:

Session - Área Comunitária

Session – Área Comunitária

3 – Ao incluir as tags de configuração da sessão no arquivo web.xml você pode definir o tempo em minutos que deseja que sessão seja valida. Use o código do arquivo xml abaixo para fazer com que a sessão dure 1 minuto, efetue o login, aguarde um minuto e atualize a pagina, com a sessão expirada você será redirecionado novamente para a pagina de login:

Session - Timeout

Session – Timeout

Exemplo:

Neste exemplo criamos uma pagina de login com a funcionalidade de autenticar em uma pagina somente para membros da comunidade e utilizamos o recurso de timeout da sessão para que ela expire assim que o usuário estiver autenticado por 1 minuto.

Obs: usuário: DevAberto e a senha: 1234

Java

Servlet – Autenticar

package org.desenvolvimento.aberto;

import java.io.IOException;
import java.io.PrintWriter;

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

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

	public Autenticar() {
		super();
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// Mostra pagina HTML
		response.setContentType("text/html");

		PrintWriter html = response.getWriter();

		html.println("<html>");
		html.println("<body>");
		html.println("<h1>Desenvolvimento Aberto</h1>");
		html.println("<h2>Login: </h2>");

		// Formulário processa este mesmo Servlet e o método DoPost
		html.println("<form action='Autenticar' method='post'>");

		html.println("Nome  : <input type='text' name='nome' size ='40' /> <br>");
		html.println("Senha : <input type='password' name='senha' size ='40' /> ");
		html.println("<input type='submit' name='login' value='Login'/> <br>");

		html.println("</form>");
		html.println("</body>");
		html.println("</html>");

	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		String usuario = request.getParameter("nome");
		String senha = request.getParameter("senha");

		// Verifica usuario e senha
		// provavelmente você utilizará um banco de dados
		// Neste exemplo utilizaremos valores fixos

		if (usuario.equals("DevAberto") && senha.equals("1234")) {
			request.getSession().setAttribute("usuario", usuario);
			response.sendRedirect("AreaComunidade");
		} 
		else {
			response.sendRedirect("Autenticar");
		}

	}

}

Servlet – Sair

package org.desenvolvimento.aberto;

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;

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

	public Sair() {
		super();
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		// Invalida sessão e redireciona para login
		request.getSession().invalidate();
		response.sendRedirect("Autenticar");
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
	}

}

Servlet – AreaComunitaria

package org.desenvolvimento.aberto;

import java.io.IOException;
import java.io.PrintWriter;

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

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

	public AreaComunidade() {
		super();
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		// Mostra pagina HTML
		response.setContentType("text/html");

		PrintWriter html = response.getWriter();

		String usuario = (String) request.getSession().getAttribute("usuario");

		if (usuario != null) {
			html.println("<html>");
			html.println("<body>");
			html.println("<h1>Desenvolvimento Aberto</h1>");
			html.println("<h2>Area da Comunidade - Java  </h2>");
			html.println("<h3>Bem-vindo: " + usuario + "</h3>");
			html.println("<p><a href='Sair'>Sair</a></p>");
			html.println("</body>");
			html.println("</html>");
		}
		else
		{
			response.sendRedirect("Autenticar");
		}
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
	}

}

Config – 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>DACliente</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<session-config>
		<session-timeout>1</session-timeout>
	</session-config>
</web-app>
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s