HTML5 UI连接到后端(REST Jersey到业务逻辑到Hibernate和DB)。我需要为每个用户登录创建和维护一个会话,直到用户退出。
我对如何处理这个问题毫无头绪。
我遵循了这种方法
最初当用户成功登录时,我在会话下设置属性,如下所示
HttpSession session = request.getSession(true);
session.setAttribute("islogged", "islogged");
String value = (String)session.getAttribute("islogged");
System.out.println("****************** The User Logge in Value"+value);
稍后在另一个页面中,我正在检查用户是否以这种方式登录
public String checkIfUserLoggedIn() throws JSONException,ClassNotFoundException, SQLException
{
HttpSession session = request.getSession();
String value = (String)session.getAttribute("islogged");
if(value==null)
{
// always its coming here only
}
}
答案 0 :(得分:2)
我同意 francesco foresti ,请不要在没有Auth的情况下依赖HTTP会话。这是不安全的,对您的应用来说非常危险。
您是否一直在实施特定的会话机制? 如果没有,那么运动衫将不会存储会话数据。您将进行的每次通话都会为您提供与您的会话ID不同的会话ID。 你必须进行身份验证和使用身份验证令牌来识别您的会话。
使用JAX-RS 请使用定义的身份验证:https://jersey.java.net/documentation/latest/security.html
@Path("authentication")
@Singleton
public static class MyResource {
// Jersey will inject proxy of Security Context
@Context
SecurityContext securityContext;
@GET
public String getUserPrincipal() {
return securityContext.getUserPrincipal().getName();
}
}
或使用其他框架:Spring,Shiro ....等 我真的更喜欢这个解决方案,因为另一个框架会为你实现很多东西。你会花很多时间这么做。
请查看官方球衣文档:https://jersey.java.net/documentation/latest/index.html
答案 1 :(得分:0)
我不会依赖http会话。我的方法是在用户登录时服务器返回的响应头中放置一个“Authorization”字段,并要求用户在每个后续调用中放置相同的头。在此标头中,您可以放置有助于服务器查找用户身份的信息 (看一下twitter的例子:https://dev.twitter.com/oauth/overview/authorizing-requests)。服务器可以在数据库中保存有关登录用户的信息,或者您可以在Singleton中创建一个Map,作为服务的“授权网守”。