3

在 PHP 中,当用户登录她的帐户时,我会执行以下操作,以便在用户浏览网站时记住她:

session_start();
...
$_SESSION['username'] = $username;

在可能需要敏感数据的任何其他页面上,我检查它$_SESSION['username']是否有效。

当使用注销时,我执行以下操作

unset($_SESSION['username']
session_destroy();

我如何在 Java 中做同样的事情?我有一个使用Jersey和的 REST API EJB。如果以下内容很重要,我坚持使用 JPA、Hibernate、Glassfish 和 mysql。

更新验证:

它是否正确?

@Path("login")
public class UserLoginResource {

  @EJB
  private LoginDao  loginDao;

  @Context
  HttpServletRequest request;

  @POST
  public Response login(JAXBElement<Login> jaxbLogin){
    Login login = jaxbLogin.getValue();
    loginDao.authenticateUserLogin(login);
    HttpSession session = request.getSession();
    session.setAttribute("username", login.getUsername());
    return Response.ok().build();
  }
}
4

2 回答 2

3

Java 与 php 非常不同,因此在 java 中,您将仅从HttpRequestgetSession()方法获取会话,在 php 中始终假定您的代码由某个服务器(即 apache)运行,在 java 中,您将获得它来自 ServletContainer(即 Apache Tomcat)。

与 php 不同,您不必在 java 中启动会话,只要您在 servlet 容器中并发出请求,如果没有会话,则此客户端 servlet 容器负责启动

所以对于上述动作:

    reqest.getSession().setAttribute("udername","Elbek");
    //later 
    reqest.getSession().removeAttribute("udername");

   //destroy it
   reqest.getSession().invalidate();

requestHttpRequest类的对象

你可以看看这个HttpSession

我强烈建议你看看 java scopes

php中没有这种东西,我希望有,但是没有

是您如何将请求对象放入您的球衣动作(方法)中,即通过注入@Context HttpServletRequest httpRequest

编辑:您不是HttpRequest自己创建对象,而是从 servlet 容器中获取它,您的服务器根据客户端请求创建它并为您提供。

于 2012-10-10T19:38:33.387 回答
0

+elbek 描述了普通的 servlet 情况——然而,现在几乎没有人编写普通的 servlet。那时候真是太恶心了,很多网络框架都在进化。它们有很多,但好的会利用依赖注入技术,如 spring
(例如,struts 2),并且有不同的范围 - 应用程序/会话/请求 - 包含普通 java bean,而这些 bean 又可以具有身份验证数据.

J2EE 还通过 servlet 容器和 JAAS 提供自己的身份验证语义 - 它还使用会话跟踪,当您需要访问一些后端资源(如数据源或队列或 EJB)时很有用 - 但大多数 Web 应用程序并不关心它。

于 2012-10-10T19:54:35.223 回答