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, Sair e AreaComunitaria, 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:
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:
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:
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>