В приложении 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).