在 PHP 中,当用户登录她的帐户时,我会执行以下操作以便在她浏览网站时记住该用户:
session_start();
...
$_SESSION['username'] = $username;
在可能需要敏感数据的任何其他页面上,我检查 $_SESSION['username']
是否有效。
当用户注销时,我执行以下操作
unset($_SESSION['username']
session_destroy();
如何在 Java 中做同样的事情?我有一个使用 Jersey
和 EJB
的 REST API。如果以下内容很重要,我会坚持使用 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();
}
}
最佳答案
Java 与 php 非常不同,因此在 java 中您只能从 HttpRequest 获取 session 的 getSession()方法,在php中它总是假设,你的代码是由一些服务器(即apache)运行的,在java中,你将从ServletContainer(即Apache Tomcat)中获取它。
与 php 不同,您不必在 java 中启动 session ,只要您在 servlet 容器中并发出请求,如果没有 session ,此客户端 servlet 容器负责启动
因此对于上述操作:
reqest.getSession().setAttribute("udername","Elbek");
//later
reqest.getSession().removeAttribute("udername");
//destroy it
reqest.getSession().invalidate();
这里的request
是HttpRequest的对象类
你可以看看这个HttpSession
我强烈推荐你看看java scopes
php 中没有这种东西,我希望有,但是没有
Here是你如何将请求对象放入你的 Jersey Action (方法),即通过注入(inject) @Context HttpServletRequest httpRequest
编辑:
您不会自己创建 HttpRequest
对象,而是从 servlet 容器中获取它,您的服务器根据客户端请求创建它并为您提供。
关于相当于 session_start()、session_destroy() 和 $_SESSION ['username' 的 Java ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826643/