Java 如何检查用户是否登录到servlet?

Java 如何检查用户是否登录到servlet?,java,jakarta-ee,authentication,servlets,Java,Jakarta Ee,Authentication,Servlets,在Java Servlet中,我想通过编程检查用户是登录还是未登录另一个答案中指出的,只有当您使用Java EE提供的容器管理安全性时,才适用 然而,如果你在家里发展你自己的安全,那么你需要依靠。这并不难,以下是您需要在每个步骤中实施的概述: 登录时,从数据库获取用户,并将其存储在会话中的doPost(): 注销时,只需在servlet的doPost()中使会话无效。它将销毁会话并清除所有属性 session.invalidate(); 要检查用户是否登录,请创建一个映射有url模式,该模式覆

在Java Servlet中,我想通过编程检查用户是登录还是未登录

另一个答案中指出的,只有当您使用Java EE提供的容器管理安全性时,才适用

然而,如果你在家里发展你自己的安全,那么你需要依靠。这并不难,以下是您需要在每个步骤中实施的概述:

登录时,从数据库获取
用户
,并将其存储在会话中的
doPost()

注销时,只需在servlet的
doPost()
中使会话无效。它将销毁会话并清除所有属性

session.invalidate();
要检查
用户是否登录,请创建一个映射有
url模式
,该模式覆盖受限制的页面,例如
/secured/*
/protected/*
,等等,并实现
doFilter()
,如下所示:

if (session.getAttribute("user") == null) {
    response.sendRedirect(request.getContectPath() + "/login"); // Not logged in, redirect to login page.
} else {
    chain.doFilter(request, response); // Logged in, just continue chain.
}
基本上就这些

另见:
(第13.10节)规定:

在处理请求期间登录到应用程序,正好对应于存在与请求相关联的有效非
null
调用方标识,这可以通过调用请求上的
getRemoteUser
getUserPrincipal
来确定。这些方法中任何一种的返回值
null
表示调用方未登录到应用程序中处理请求


谢谢,我能工作。但是请告诉我如何在servlet中设置usename,以便getUserPrincipal()进一步调用它。您不能在J2EE应用程序中设置主体。应用服务器必须改变这一点。您的应用程序只需提供安全规则的定义及其对servlet的分配,其余的由应用程序服务器完成(即识别用户并授权他们访问特定端点)。有许多关于J2EE安全的教程,例如,这里有一个:
chain.doFilter(request,response);
这里的链是什么?
if (session.getAttribute("user") == null) {
    response.sendRedirect(request.getContectPath() + "/login"); // Not logged in, redirect to login page.
} else {
    chain.doFilter(request, response); // Logged in, just continue chain.
}