Java等价于session_start(),session_destroy()和$ _SESSION ['username']

时间:2012-10-10 19:12:40

标签: java session jersey

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

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

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

当用户退出时,我会执行以下操作

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

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

更新为VERIFICATON:

这是对的吗?

@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();
  }
}

2 个答案:

答案 0 :(得分:3)

Java与php非常不同,所以在java中你只会从HttpRequestgetSession()方法获得会话,在PHP中它是时间假设,你的代码是由某个服务器运行的(即apache),在java中,您将从ServletContainer(即Apache Tomcat)获取它。

你不必在java中启动会话,不像php,只要你在servlet容器中并给出请求,对于这个客户端servlet容器负责启动,如果没有会话

所以对于上述行动:

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

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

此处requestHttpRequest class

的对象

您可以查看此HttpSession

我强烈建议您查看java scopes

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

Here是你如何通过注入@Context HttpServletRequest httpRequest来获取请求对象(方法),即注入HttpRequest

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

答案 1 :(得分:0)

+ elbek描述了普通的servlet情况 - 但是,现在几乎没有人编写普通的servlet。它当时很多人生病了,很多网络框架都在不断发展。它们有很多,但是很好的将使用依赖注入技术,如spring (例如,struts 2)并且有不同的范围 - 应用程序/会话/请求 - 包含普通的java bean,它们可以依次具有身份验证数据。

J2EE还提供了自己的身份验证语义与servlet容器和JAAS - 它还使用会话跟踪,当您需要访问某些后端资源(如数据源或队列或EJB)时非常有用 - 但大多数Web应用程序都不会烦恼。