Я искал учебники по этим темам, но все они устарели. Может ли кто-нибудь предоставить мне какие-либо ссылки или примеры интеграции Spring безопасности в GWT?Интеграция GWT с системой безопасности Spring
ответ
Прежде всего, вы должны иметь в виду, что приложение GWT превращено в javascript, работающий на стороне клиента, так что вы ничего не можете сделать для обеспечения некоторых ресурсов там. Вся конфиденциальная информация должна храниться на стороне сервера (как и в любом другом случае, а не только для GWT), поэтому правильный способ - подумать о интеграции Spring Security с точки зрения уровня сервисов приложений и интеграции этой безопасности с протоколом связи использование - в случае GWT в большинстве случаев это фабрика запросов.
Решение не очень простое, но я не мог бы сделать это лучше, но любые предложения по уточнению приветствуются.
Необходимо начать с создания GWT ServiceLayerDecorator
, который соединит мир фабрики запросов с миром весны. Переписать createServiceInstance
метод, принимая имя класса пружинных служб, которая будет вызвано из значения аннотаций ServiceName и вернуть экземпляр этой службы (вам необходимо получить его с весны ApplicationContext
):
final Class<?> serviceClass = requestContext.getAnnotation(ServiceName.class).value();
return appContext.getBean(serviceClass);
Кроме того, вы должны переопределить суперкласс invoke(Method, Object...)
метода в чтобы поймать все выброшенные исключения времени выполнения. Исследуемая причина исключения должна быть проанализирована, если это экземпляр Spring Security AccessDeniedException
. Если это так, следует исключить причину исключения. В этом случае GWT не будет сериализовать исключение в строку, но снова его восстановить, поэтому сервлет диспетчера может справиться с этим, установив соответствующий код состояния HTTP-ответа. Все остальные типы исключений будут сериализованы GWT в String.
На самом деле вы можете поймать только GWT ReportableException
, но, к сожалению, у него есть модификатор доступа к пакету (хе ... GWT не так легко расширяем). Захват всех исключений во время выполнения намного безопаснее (althouth не очень изящный, у нас нет выбора) - если реализация GWT изменится, этот код все равно будет работать нормально.
Теперь вам нужно подключить ваш декоратор. Вы можете сделать это легко за счетом расширения запроса заводского сервлета и определения ваш: сервлет конструктора следующим образом:
public MyRequestFactoryServlet() {
this(new DefaultExceptionHandler(), new SpringServiceLayerDecorator());
}
Последней вещи - вам нужно сделать грязный хак и перезаписать запрос завода сервлет метода doPost изменяя способ, как она обрабатывает исключения - по умолчанию исключение сериализуется в строку, а сервер отправляет 500 код состояния. Не все исключения должны приводить к 500 с.с - например, исключения безопасности должны приводить к несанкционированному коду состояния. Так что вам нужно сделать, это переписать механизм обработки исключений следующим образом:
catch (RuntimeException e) {
if (e instanceof AccessDeniedException) {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
} else {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
LOG.log(Level.SEVERE, "Unexpected error", e);
}
}
Вместо расширения классов, вы можете попробовать использовать некоторые «вокруг» аспекты - это чистое решение в этом случае.
Вот и все! Теперь вы можете аннотировать свой уровень сервисов как обычно с помощью аннотаций Spring Security (@Secured
и т. Д.).
Я знаю - все сложно, но фабрика запросов Google вряд ли расширяется. Ребята отлично поработали над протоколом связи, но дизайн этой библиотеки просто ужасен. Конечно, клиентский код имеет некоторые ограничения (он скомпилирован в java-скрипт), но серверный код может быть разработан намного лучше ...
сегодня один Идея пришла мне в голову, как вы думаете, если я проверю данные авторизации, до того, как метод сервлетов GWT будет реализован, проверьте, что пользователь whethear является анонимным или нет, если это анонимный метод возвращает null, на стороне клиента мы можем получить null в результате и перезагрузить страницу. Например, в сервлете GWT в каждом методе будет проверяться аутентификация auth = SecurityContextHolder.getContext(). getAuthentication(); если он не аутентифицирован, то верните нуль или любую информацию на клиентскую сторону и обработайте ее поверх них. Является ли идея жизнеспособной для реализации? – Olzhas
- 1. Интеграция Spring с GWT
- 2. Gwt + Spring Security интеграция
- 3. Интеграция GWT 2.0 с Spring Security 3.0
- 4. Интеграция GWT и Spring Security
- 5. Интеграция безопасности ModeShape JCR с Spring MVC
- 6. Интеграция Pentaho с GWT
- 7. Интеграция GWT с весной
- 8. Atmosphere + GWT + Spring проблема интеграции безопасности
- 9. Интеграция безопасности GWT и Spring с использованием пользовательского диалогового окна регистрации
- 10. Интеграция Spring Security 3 с GWT 2.1 Приложение REST/JSON
- 11. Интеграция GWT с maven-spring без плагина Google для Eclipse
- 12. Интеграция безопасности с Spring MVC-приложением (проблема ApplicationContext)
- 13. Весенняя интеграция безопасности с сервером идентификации WSO2
- 14. Интеграция с биллинговой системой/документация api? песочница?
- 15. Disqus Интеграция с моей системой аутентификации
- 16. Интеграция Meteor js с существующей пользовательской системой
- 17. Интеграция OpenERP с основной банковской системой Банка
- 18. Интеграция ElFinder с существующей системой разрешений
- 19. Интеграция CodeIgniter с пользовательской системой phpBB3
- 20. Интеграция с веб-браузером и файловой системой
- 21. Интеграция с платежной системой Amazon Checking
- 22. Интеграция Captcha с Spring Security
- 23. Интеграция Spring с Log4j2
- 24. Интеграция с Mybatis Spring
- 25. Интеграция Spring с IntelliJ
- 26. Интеграция SEAM GWT
- 27. Интеграция GWT Maven
- 28. Непрерывная интеграция для GWT
- 29. интеграция RestyGWT и GWT
- 30. ShareThis GWT Интеграция
Ниже приведено обсуждение одной страницы входа в систему для GWT - см. Мои комментарии для принятого ответа. У меня нет фрагментов кода прямо здесь, но я постараюсь предоставить вам их сегодня вечером. http://stackoverflow.com/questions/6508238/gwt-authentication-for-some-part-of-application-using-gwt-login-page –
Рассмотрите [это] (http://stackoverflow.com/questions/13914547/gwt-spring-security-integration-pure-gwt-no-jsp/13934318 # 13934318) ответьте, если вы заинтересованы в применении безопасности для методов на стороне сервера –
@PiotrekDe Я буду ждать фрагментов кода ур, спасибо – Olzhas