Я пытаюсь создать функцию входа в систему, и я хочу сохранить в данных конкретных сеансов для использования в будущих запросах пользователя, возможно ли это?Как связать сеанс с объектом пользователя с помощью джерси
В loginUser, если это всегда неверно, даже если пользователь уже зарегистрировал и тот же в updatePassword.
Мне нужно сохранить атрибут от функции loginUserToSession
. Любая идея, почему это не работает?
вот мой код
Ресурс
@Path("/logIn")
@Singleton
public class UserResource extends baseResource<UserDao, UserEntity>
{
@Path("/authenticateUser")
@GET
@UnitOfWork
public String loginUser(@Context HttpServletRequest req @QueryParam("callback") String callback, @QueryParam("loginInfo") LoginInfo loginInfo) throws JsonProcessingException
{
if(SessionManager.isUserConnected(req))
{
return ResourceResponse.getResourceJsonString("null", callback, "true", ErrorMessageEnum.SUCCESS);
}
String userName = loginInfo.username;
String plainTextPassword = loginInfo.password;
UserEntity user = objectDao.logIn(userName, plainTextPassword);
if(user != null)
{
SessionManager.loginUserToSession(req, user.getUserId(), userName);
return ResourceResponse.getResourceJsonString(user.getUserStatus(), callback, "true", ErrorMessageEnum.SUCCESS);
}
return ResourceResponse.getResourceJsonString("null", callback, "false", ErrorMessageEnum.LOGIN_FAILED);
}
@Path("/updatePassword")
@GET
@UnitOfWork
public String updatePassword(@Context HttpServletRequest req, @QueryParam("callback") String callback, @QueryParam("oldPwd") String oldPwd, @QueryParam("newPwd") String newPwd) throws JsonProcessingException
{
if(SessionManager.isUserConnected(req))
{
short userId = SessionManager.getUserId(req);
ObjectDaoResponse res = objectDao.updatePassword(userId, oldPwd, newPwd);
return ResourceResponse.getResourceJsonString(res.getObjectJsonString(), callback, res.getSuccess(), res.getCode());
}
else
{
return ResourceResponse.getResourceFailResponseString(callback, ErrorMessageEnum.USER_NOT_CONNECTED);
}
}
}
SessionManager.java
public static void loginUserToSession(HttpServletRequest req, short userId, String userName)
{
if(req == null)
{
return;
}
HttpSession session = req.getSession(true);
session.setAttribute(ATTRIBUTE_USER_NAME, userName);
session.setAttribute(ATTRIBUTE_USER_ID, userId);
session.setAttribute(ATTRIBUTE_USER_CONNECTED, true);
}
public static boolean isUserConnected(HttpServletRequest req)
{
if(req == null)
{
return false;
}
HttpSession session = req.getSession(false);
if(session != null)
{
boolean userConnected = (boolean) session.getAttribute(ATTRIBUTE_USER_CONNECTED);
if(userConnected)
{
return userConnected;
}
System.out.Println("session.getAttribute(ATTRIBUTE_USER_CONNECTED)== null");
}
return false;
}
просто «еще» не делает трюк .. Я хотел бы это было так просто :) –
строка SessionManager.loginUserToSession (REQ, user.getUserId(), Username) ;, в функции loginUser делать только что см. часть SessionManager.java –
«Возвращает текущую HttpSession, связанную с этим запросом, или, если нет текущей сессии, а create - true, возвращает новый сеанс». , и нам нужна новая сессия, если мы добрались до этой точки и не вернулись в «if (SessionManager.isUserConnected (req))» –