Добавление контроля доступа в приложения на основе GWT - PullRequest
2 голосов
/ 29 сентября 2010

У меня есть приложение на основе GWT.Я хочу добавить контроль доступа к нему.Есть ли способ добавить пользовательский контроль доступа для компонентов GWT?

Моя идея о добавлении контроля доступа / разрешений будет выглядеть следующим образом:

  1. Добавить аннотацию контроля доступа (если она есть) к классу (компонент GWT), для которого мне нужнодобавить контроль доступа.
  2. Когда этот компонент визуализируется, вызывается мой пользовательский метод, который проверяет правила управления доступом и, в зависимости от его результатов, компонент обрабатывается.

Любые идеи о том, как этого можно достичь.

1 Ответ

3 голосов
/ 21 ноября 2010

В приложении GWT я осуществлял контроль доступа двумя способами, оба предполагают, что контроль доступа на сервере принудительно применяется - при каждом вызове AJAX (GWT RPC).Сторона javascript по своей сути небезопасна, поэтому любые элементы управления там будут бессмысленными.

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

/public/gwt.rpc.endpoint
/private/gwt.rpc.endpoint

Защитите частный с помощью либо стандартного болота web.xml, либо Spring Security.Однако это побудило меня обработать логины «обычным» способом на основе форм перед запуском приложения GWT.

Более детальный подход заключался в использовании исключения для каждого метода GWT RPC:

interface MyService extends RemoteService {
  SomeData getPublicData();
  SomeSecret getPrivateData() throws AccessDeniedException; 
  Result login(String username, String password);
}

interface MyServiceAsync {
  void getPublicData(AsyncCallback<SomeData> callback);
  void getPrivateData(AsyncCallback<SomeSecret> callback);
  void login(String username, String password, AsyncCallback<Result> callback);
}

Делая AccessDeniedException RPC сериализуемым, я получу это исключение в AsyncCallback - это позволяет вызвать диалог входа в систему внутри приложения GWT.

Однако фактический вызов входа и сторона сервераобработка сессий я тогда полностью выполнил вручную, не полагаясь на какие-либо рамки для этого (хотя вы могли бы сделать это с помощью Spring Security).

...