Appengine user service + GWT не выходит из системы - PullRequest
0 голосов
/ 18 февраля 2012

У меня есть приложение appengine с GWT-интерфейсом. Я использую сервис пользователя appengine для аутентификации в аккаунтах Google. Моя проблема заключается в том, что при выходе из интерфейса GWT пользователь не полностью вышел из системы. Пользователю показывается страница входа в систему, однако, когда вы снова нажимаете кнопку входа в систему с помощью Google, вы переходите прямо в приложение, не переходя на страницу входа в Google. Я не использую здесь какие-либо пользовательские поля для входа / прохода, строго appengine user service.

Я предполагаю, что это как-то связано с сеансами HTTP и базовой аутентификацией, однако я не смог полностью выйти из системы.

Вот служба входа / выхода на сервере:

import javax.servlet.http.HttpSession;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

@SuppressWarnings("serial")
public class LoginServiceImpl extends RemoteServiceServlet implements
LoginService {
  public final static String CHANNEL_ID = "channel_id";

  @Override
  public UserAccountDTO getLoggedInUserDTO() {
    UserAccountDTO userDTO;
    HttpSession session = getThreadLocalRequest().getSession();

    UserAccount u = LoginHelper.getLoggedInUser(session, null);
    if (u == null)
      return null;
      userDTO = UserAccount.toDTO(u);
      UserService userService = UserServiceFactory.getUserService();
      userDTO.setLogoutURL(userService.createLogoutURL(requestUri));
    return userDTO;
  }

  @Override
  public void logout() throws NotLoggedInException {
     getThreadLocalRequest().getSession().invalidate();
    throw new NotLoggedInException("Logged out");
  }

} 

На стороне клиента GWT я использую этот код для выхода из системы:

Window.Location.assign(currentUserDTO.getLogoutURL());

Когда я нажимаю ссылку выхода из системы в моем приложении (которое запускает приведенный выше код), ничего не меняется. Однако, если я перезагружаю страницу, меня отправляют на страницу входа в мое приложение. Когда я нажимаю, чтобы войти с моей учетной записью Google, он сразу попадает в мое приложение, не запрашивая учетные данные Google. Это говорит мне о том, что пользователь вышел из моего приложения appengine, однако пользователь все равно каким-то образом вошел в свою учетную запись Google в браузере (я предполагаю, что токен аутентификации сохранен как cookie?) Мне нужно, чтобы мои пользователи полностью вышли из этой учетной записи Google, чтобы у следующего посетителя сайта запрашивались учетные данные Google.

1 Ответ

2 голосов
/ 18 февраля 2012

В идеале, чтобы выйти из GAE / Google, я бы использовал logOutUrl, выходящий из userService.Например,

UserService userService = UserServiceFactory.getUserService();
logOutURL = userService.createLogoutURL(baseURL);

logOutURL - это место, куда я бы перенаправил окно, чтобы выйти из Google

Также проверьте небольшой сервлет, который я написал для входа и выхода по адресу: http://cloudspring -demo.appspot.com / html / csAuth.html Вы можете просто скопировать этот сервлет в соответствующий сервлет, а после добавления отображения в web.xml вы можете просто вызвать его для тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...