// Obtendo ou criando uma sessão
HttpSession session = request.getSession();
// Ou especificando se deve criar caso não exista
HttpSession session = request.getSession(true);
http://meusite.com.br/pagina.jsp;jsessionid=A43F7D2C0EE0B35742B15B41577E5F8A
// Armazenando dados na sessão
session.setAttribute("usuario", usuarioLogado);
session.setAttribute("permissoes", listaPermissoes);
session.setAttribute("tema", temaPreferido);
// Recuperando dados da sessão
Usuario user = (Usuario) session.getAttribute("usuario");
List permissoes = (List) session.getAttribute("permissoes");
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
// Validação simples (substitua por consulta ao banco)
if ("admin".equals(username) && "senha123".equals(password)) {
// Cria a sessão
HttpSession session = request.getSession();
// Armazena informações do usuário
session.setAttribute("usuarioLogado", username);
session.setAttribute("autenticado", true);
// Redireciona para área restrita
response.sendRedirect("areaRestrita.jsp");
} else {
// Redireciona de volta com mensagem de erro
response.sendRedirect("login.jsp?erro=credenciais");
}
}
}
// Define o tempo máximo de inatividade (em segundos)
session.setMaxInactiveInterval(1800); // 30 minutos
// Para sessões mais curtas (ex: área sensível)
session.setMaxInactiveInterval(300); // 5 minutos
// Para sessões mais longas (ex: "Lembrar de mim")
session.setMaxInactiveInterval(86400); // 24 horas
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Obtém a sessão atual (sem criar nova)
HttpSession session = request.getSession(false);
if (session != null) {
// Invalida a sessão
session.invalidate();
}
// Redireciona para a página inicial
response.sendRedirect("index.jsp");
}
}
<%
// Verifica se usuário não está autenticado
if (session.getAttribute("autenticado") == null) {
// Redireciona para página de login
response.sendRedirect("login.jsp");
return; // Importante para interromper a execução
}
%>
<!-- Conteúdo restrito aqui -->
@WebFilter("/admin/*")
public class AutorizacaoFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
// Obtém a sessão (sem criar nova)
HttpSession session = req.getSession(false);
// Verifica se está autenticado
boolean isAutenticado = session != null &&
session.getAttribute("autenticado") != null &&
(Boolean) session.getAttribute("autenticado");
// Permite o acesso ou redireciona
if (isAutenticado) {
// Continua o processamento da requisição
chain.doFilter(request, response);
} else {
// Redireciona para login
res.sendRedirect(req.getContextPath() + "/login.jsp");
}
}
// Outros métodos do Filter...
}
<!-- login.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h1>Acesso ao Sistema</h1>
<% if (request.getParameter("erro") != null) { %>
<p style="color: red;">Usuário ou senha inválidos!</p>
<% } %>
<form action="login" method="post">
<div>
<label for="username">Usuário:</label>
<input type="text" id="username" name="username" required>
</div>
<div>
<label for="password">Senha:</label>
<input type="password" id="password" name="password" required>
</div>
<button type="submit">Entrar</button>
</form>
</body>
</html>
// No LoginServlet, substitua a validação simples por:
String sql = "SELECT * FROM usuarios WHERE username = ? AND senha = ?";
try (Connection conn = DatabaseUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, username);
stmt.setString(2, password); // Idealmente, use hash+salt
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
// Usuário encontrado, credenciais válidas
HttpSession session = request.getSession();
session.setAttribute("usuarioLogado", username);
session.setAttribute("autenticado", true);
// Opcional: carregar mais dados do usuário
session.setAttribute("nomeCompleto", rs.getString("nome"));
session.setAttribute("perfil", rs.getString("perfil"));
response.sendRedirect("areaRestrita.jsp");
return;
}
}
}
// Se chegou aqui, credenciais inválidas
response.sendRedirect("login.jsp?erro=credenciais");
import java.security.MessageDigest;
import java.security.SecureRandom;
import java.util.Base64;
// Gerar salt aleatório
SecureRandom random = new SecureRandom();
byte[] salt = new byte[16];
random.nextBytes(salt);
String saltBase64 = Base64.getEncoder().encodeToString(salt);
// Combinar senha com salt e aplicar hash
String senha = "minhasenha";
String senhaComSalt = senha + saltBase64;
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hashedPassword = md.digest(senhaComSalt.getBytes());
String hashedPasswordBase64 = Base64.getEncoder().encodeToString(hashedPassword);
// Armazenar no banco: hashedPasswordBase64 e saltBase64 (em campos separados)
// No LoginServlet, após validar credenciais:
// Invalida a sessão antiga
session.invalidate();
// Cria uma nova sessão
session = request.getSession(true);
// Armazena os dados do usuário na nova sessão
session.setAttribute("usuarioLogado", username);
session.setAttribute("autenticado", true);
<!-- areaRestrita.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Área Restrita</title>
</head>
<body>
<h1>Bem-vindo à Área Restrita</h1>
<p>
Olá, ${sessionScope.usuarioLogado}!
Você está autenticado.
</p>
<div>
<a href="conteudoProtegido.jsp">Conteúdo Protegido</a>
</div>
<div>
<a href="logout">Sair do Sistema</a>
</div>
</body>
</html>
<h3>Informações da Sessão (Debug)</h3>
<p>ID da Sessão: <%= session.getId() %></p>
<p>Criada em: <%= new java.util.Date(session.getCreationTime()) %></p>
<p>Último acesso: <%= new java.util.Date(session.getLastAccessedTime()) %></p>
<p>Tempo máximo inativo: <%= session.getMaxInactiveInterval() %> segundos</p>
<p>Usuário logado: <%= session.getAttribute("usuarioLogado") %></p>
<!-- No login.jsp -->
<%
String mensagem = "";
String tipo = "";
if (request.getParameter("erro") != null) {
String erro = request.getParameter("erro");
if ("credenciais".equals(erro)) {
mensagem = "Usuário ou senha inválidos. Tente novamente.";
tipo = "erro";
} else if ("sessao".equals(erro)) {
mensagem = "Sua sessão expirou por inatividade. Por favor, faça login novamente.";
tipo = "aviso";
} else if ("acesso".equals(erro)) {
mensagem = "Você precisa fazer login para acessar esta página.";
tipo = "info";
} else if ("logout".equals(erro)) {
mensagem = "Você saiu do sistema com sucesso.";
tipo = "sucesso";
}
}
%>
<% if (!mensagem.isEmpty()) { %>
<div class="mensagem <%= tipo %>">
<%= mensagem %>
</div>
<% } %>
// Verificar se usuário tem permissão específica
if (session.getAttribute("perfil") != null &&
"ADMIN".equals(session.getAttribute("perfil"))) {
// Mostrar funcionalidades de administrador
} else {
// Esconder ou desabilitar funcionalidades restritas
}