在PHP中,当用户登录其帐户时,我会执行以下操作以便在用户浏览网站时记住该用户:
session_start();
...
$_SESSION['username'] = $username;
在可能需要敏感数据的任何其他网页上,我会检查$_SESSION['username']
是否有效。
当用户退出时,我会执行以下操作
unset($_SESSION['username']
session_destroy();
我如何用Java做同样的事情?我有一个使用Jersey
和EJB
的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();
}
}
答案 0 :(得分:3)
Java与php非常不同,所以在java中你只会从HttpRequest的getSession()方法获得会话,在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();
此处request
是HttpRequest 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应用程序都不会烦恼。