如何检查用户是否在Servlet中登录?

Java Servlet中,我想以编程方式检查用户是否已登录

另一个答案中指出的HttpServletRequest#getUserPrincipal()仅适用于您使用此处概述的Java EE提供的容器管理安全性。

但是,如果您正在为自己的安全性增长,那么您需要依赖于HttpSession 。 这并不难,这里概述了每个步骤需要实现的内容:

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

 User user = userDAO.find(username, password); if (user != null) { session.setAttribute("user", user); } else { // Show error like "Login failed, unknown user, try again.". } 

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

 session.invalidate(); 

要检查User是否已登录,请创建一个filter ,该filter使用覆盖受限页面的url-pattern映射,例如/secured/*/protected/* ,etcetera和如下所示的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. } 

这基本上都是。

也可以看看:

  • 如何在Java Web应用程序中将会话过期时重定向到“登录”页面?
  • 如何处理数据库中用户的身份validation/授权?

HttpServletRequest.getUserPrincipal()

Java Servlet 3.1规范 (第13.10节)规定:

在处理请求期间登录到应用程序,恰好对应于与请求关联的有效 null者身份,可以通过在请求上调用getRemoteUsergetUserPrincipal来确定。 来自这些方法之一的null返回值表示调用者未针对请求的处理登录到应用程序。