GWT / GAE (Java): в сочетании с GAE аутентификация пользователя app.yaml / web.xml и вход / выход из системы не работают - PullRequest
0 голосов
/ 15 января 2012

Я пишу веб-приложение, используя GWT и GAE (Java).Я хорошо знаю GAE, особенно версию Python;Я новичок в GWT и Java-версии GAE.


Я попытался настроить свое приложение так, чтобы пользователю приходилось входить в систему для доступа;from app.yaml.

application: myapp
version: 1
runtime: java

welcome_files:
 - index.jsp
 - index.html

handlers:

- url: /admin/*
#  secure: always
 login: admin

- url: /MyApp.html
#  secure: always
 login: required

Похоже, что генерируется файл web.xml с ограничениями доступа на главной странице:

 <security-constraint>
   <web-resource-collection>
     <url-pattern>/MyApp.html</url-pattern>
   </web-resource-collection>
   <auth-constraint>
     <role-name>*</role-name>
   </auth-constraint>
 </security-constraint>

Как и ожидалось, при запуске под ant devmode яТребуется поддельный вход в систему, когда я впервые захожу на страницу.


Однако я хотел, чтобы у пользователя был URL для выхода из системы.

Во-первых, кажется, нет способа сделать это.на клиенте, что кажется странным: как может быть, что мне нужно попасть на сервер, чтобы сгенерировать URL, чтобы пользователь мог выйти из системы?Однако, не видя альтернативы, я написал для этого RPC-сервис.

Я использовал элемент HTML в GWT, чтобы поместить ссылку на страницу;похоже, это работает, когда я помещаю ссылки на поиски в Google и т. д. Когда я помещаю URL-адрес для выхода из системы (который был создан для того, чтобы связать пользователя с главной страницей, требующей входа в систему) (то, что я делал раньше с Python-версией GAE безвсе, что связано с Ajax) вместо того, чтобы снова попросить войти в систему (и затем посмотреть главную страницу), я просто получаю 404. Not foundпоэтому я фактически скомпилировал приложение и запустил его как скомпилированное приложение GAE (dev_appserver.sh), точно такая же проблема.) Я перехожу на главную страницу своего приложения и службы RPC, которую я написал, чтобы получить URL-адрес выхода для пользователя, который отвечает, что пользователь не вошел в систему.

Учитывая конфигурацию app.yaml (которая, кажется, правильносоздать файл web.xml), чтобы пользователь даже не мог видеть страницу, если он не вошел в систему, как это возможно?даже случиться?Даже если пользователь правильно вышел из системы (на странице, когда он говорит 404), как я могу перейти на главную страницу своего приложения и при этом не войти в систему?

Является ли это эффектом Ajax, когда пользовательВыйдет из системы, но страница сообщает об этом (уже была обработана, когда пользователь вошел в систему), а затем RPC подключается к серверу и обнаруживает, что пользователь вышел из системы?Если это так, тогда кажется довольно бессмысленным ограничивать доступ в app.yaml / web.xml, поскольку мне также приходится проверять его каждый раз, когда я получаю вызов RPC в любом случае, верно?(Я полагаю, что конфигурация app.yaml может сохранить несколько обращений к серверу при первом посещении страницы пользователем?)


Я использую последнюю версию OS X 10.60,8 (x86).Мой браузер Chrome: 16.0.912.63 (официальная сборка 113337)

$ java -version
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11-402-10M3527)
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode)

Я использую gwt-2.4.0.

Ответы [ 2 ]

3 голосов
/ 13 сентября 2012

Демонстрационный код заметок из Google App Engine использует RPC, и ссылка создается на стороне сервера с использованием чего-то вроде:

userService.createLogoutURL(userService.createLoginURL("/"))

Я еще не пробовал.

Обновление: я проверил, и он работал нормально.

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

У вас может быть сервлет (или страница JSP), который создает URL-адрес выхода и перенаправляет на него клиента.

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