Как обрабатывать ограничения безопасности с помощью RequestFactory GWT 2.1? - PullRequest
3 голосов
/ 29 декабря 2010

В настоящее время я занимаюсь разработкой приложения GWT 2.1, которое должно быть развернуто в Google App Engine. Я хотел бы реализовать взаимодействие с сервером с использованием нового RequestFactory.

Теперь мой вопрос заключается в том, как решить мелкозернистые проблемы безопасности в этом контексте? Некоторые действия сервера (из тех, которые объявлены в заглушках RequestContext) должны быть ограничены для определенных пользователей (возможно, в зависимости от параметров удаленного вызова). Если вызов не авторизован, я бы хотел, чтобы клиент показывал страницу входа в систему (например, чтобы можно было войти в систему как другой пользователь).

Из примера «Расходы» я знаю, как реализовать автоматическое перенаправление на страницу входа, но в этом примере модель безопасности довольно проста: клиенту разрешен доступ к сервлету, если и только если пользователь вошел в систему .

Должен ли я вызывать пользовательское исключение UnAuthorizedException в моей серверной службе? Где я должен перехватить это исключение? (Могу ли я сделать это в фильтре сервлетов, например, GaeAuthFilter в примере расходов?)

1 Ответ

5 голосов
/ 03 марта 2011

Я тоже искал решение этой проблемы и придумал следующее. Он не полностью обрабатывает аспекты пользовательского интерфейса (т.е. перенаправление на страницу входа в систему), но защищает уровень данных от несанкционированного доступа.

public class MyRequestFactoryServlet extends RequestFactoryServlet
{
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException
    {
        if (! userIsLoggedIn(req))
        {
            throw new ServletException("not logged in");
        }
        else
        {
            super.doPost(req, res);
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
    {
        if (! userIsLoggedIn(req))
        {
            throw new ServletException("not logged in");
        }
        else
        {
            super.doGet(req, res);
        }
    }

    protected boolean userIsLoggedIn(HttpServletRequest req)
    {
        // insert your custom code here for checking session for valid login token
        User user = (User) req.getSession().getAttribute("LOGGED_IN_USER");
        return user != null && user.isEnabled();
    }

Затем вы используете MyRequestFactoryServlet в своем web.xml вместо RequestFactoryServlet.

Для обработки пользовательского интерфейса входа в систему у меня есть целевая страница моего приложения для проверки правильности входа в систему с использованием GWT RPC; если пользователь не вошел в систему, ему будет предложено ввести имя пользователя / пароль. Приведенный выше код защищает серверную часть от пользователей, которые пытаются обойти страницу входа в систему путем прямого перехода к другим URL-адресам или размещения данных в сервлете вручную.

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