Вход в систему пользователя во время загрузки файла App Engine - PullRequest
1 голос
/ 23 января 2012

Я пишу приложение Google App Engine, которое загружает файлы в Blobstore, используя форму POST и метод createUploadUrl. В HttpServlet, который обрабатывает загрузку, UserService.getCurrentUser и getUserPrincipal возвращают ноль. Пользователь вошел в систему, и другие вызовы RemoteServiceServlet могут получить его. Как я могу получить зарегистрированное имя пользователя во время загрузки?

Ответы [ 2 ]

0 голосов
/ 05 августа 2014

Я предполагаю, что вы получите это только в режиме локального разработчика. Если это так, вот объяснение (и решение): пользователь вошел в систему на 127.0.0.1, но URL-адрес, возвращенный для новой загрузки в хранилище BLOB-объектов (в локальном режиме), содержит имя компьютера. Как следствие, сеанс прерывается во время перенаправления POST из хранилища больших двоичных объектов в ваш обработчик загрузки, и ваша служба больше не распознает пользователя, вошедшего в систему.

Вот обходной путь. Приведенный ниже метод живет на сервере и может вызываться напрямую через RPC (из приложения GWT) или из сервлета:

public String getNewUploadLink() {
    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    String url = blobstoreService.createUploadUrl("/myappname/upload");
    String modifiedUrl = url.replace("ThisIsMyComputerName", "127.0.0.1"); 
    return modifiedUrl;
}

Вы видите, что он манипулирует URL-адресом перед возвратом его клиенту. Более хорошая версия будет проверять, работает ли служба в режиме разработки или в производственном режиме, а затем действовать соответствующим образом, но она выделяет основную причину этой проблемы, чтобы вы могли продолжить разработку на своем локальном компьютере.

0 голосов
/ 23 января 2012

Если ничего не помогает, вы можете отправить его с формой в качестве параметра или добавить имя к объекту сеанса, который вы можете получить в обработчике. Но получение имени пользователя, как и в любом другом месте, работало для меня в HTTP POST (python) и должно работать так же, используя Java.

Но в любом случае у вас есть 3 варианта: - обычным образом должен работать - Если это не удается, получите имя пользователя на странице отправки формы и отправьте его вместе с формой. - Если ничего не помогает, используйте объект сеанса, где вы можете получить имя пользователя

Идеальное решение - это первое, а два других - это обходные пути, так как то, как вы это делаете, должно работать.

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