2016-10-19 2 views
1

Я пытаюсь создать функцию входа в систему, и я хочу сохранить в данных конкретных сеансов для использования в будущих запросах пользователя, возможно ли это?Как связать сеанс с объектом пользователя с помощью джерси

В 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; 
    } 

ответ

0

Получается, что по какой-то причине gomail почтальон не отправляет HttpServletRequest, как и должно быть. поэтому jersey переводит его как новый пользователь и создает пустой новый HttpServletRequest. Заключение не проверяет вашу серверную сторону почтовым клиентом Google , когда я пытаюсь отправить запрос от моего клиента, он отлично работает.

1

Пожалуйста, измените в ресурс так:

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); 
      }else{ 
      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); 
      } 
      } 
     } 

Выше была ошибка потока, что я получил, теперь вы должны SetAttribute в область сеанса затем использовать это:

HttpSession session = request.getSession(); 
session.setAttribute("UserName", "Usename_Value"); 

Или для запроса Scope использование этого:

request.setAttribute("attributeName",yourStringVAlue); 
+0

просто «еще» не делает трюк .. Я хотел бы это было так просто :) –

+0

строка SessionManager.loginUserToSession (REQ, user.getUserId(), Username) ;, в функции loginUser делать только что см. часть SessionManager.java –

+0

«Возвращает текущую HttpSession, связанную с этим запросом, или, если нет текущей сессии, а create - true, возвращает новый сеанс». , и нам нужна новая сессия, если мы добрались до этой точки и не вернулись в «if (SessionManager.isUserConnected (req))» –

Смежные вопросы