![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Vladus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 1.2.2008 Репутация: 1 Всего: 4 |
Всем доброго времени суток.
Появилась необходимость к приложению, имеющему веб сервисы прикрутить security. Веб сервисы реализованы с помощью Spring Web Service, security - Spring security. Теперь о проблеме: как заставить веб сервисы работать с секьюрити(под секьюрити я понимаю разграничение прав), ибо раньше был только один пользователь и базовая томкатовская аутентификация. На спринговом сайте нашел совсем крохи, буквально используйте SpringPlainTextPasswordValidationCallbackHandler, а про то, как его использовать и где - не написано совсем ничего.
т.е. понятно, что к userDetailsService нужно подставить свой дао, который бы вытаскивал пользователя с базы(что я и сделал), а что делать дальше, и как должна проходить аутентификация для веб сервисов - непонятно совсем :( Вообщем, может я не ясно обрисовал картину, но буду рад любой помощи. |
|||
|
||||
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
может тут что-нибудь прочитаешь?
Spring-WS С security работал, но только как безопасность web-приложения. Сервисы через EJB3. Секьюрить пока не было требования. Так что пока ничего дельного не подскажу... -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| Vladus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 1.2.2008 Репутация: 1 Всего: 4 |
MisterCleric, спасибо, но я уже читал этот мануал, и из того, что меня интересует, а именно аутентификации с помощью этого класса (я так понял, что его использование - стандартный подход при связывании спринг секьюрити и веб сервисов) - SpringPlainTextPasswordValidationCallbackHandler там панисано лишь то, что я написал выше и пара общих фраз
|
|||
|
||||
| MisterCleric |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
В Spring-WS есть выше такой пример:
в JavaDoc org.springframework.ws.soap.security.AbstractWsSecurityInterceptor написано:
Ну и дальше колупаем куда надо поставить такой интерцептор на своих бинах Добавлено через 11 минут и 46 секунд Еще нашел такое. В spring-ws дистрибутиве есть самплы. И самый первый из них (airline) как раз и показывает одной из своих функциональностей, как секьюрить сервисы -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||
|
|||||
| Vladus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 1.2.2008 Репутация: 1 Всего: 4 |
MisterCleric, еще раз спасибо, продолжу ковыряться...
|
|||
|
||||
| Vladus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 1.2.2008 Репутация: 1 Всего: 4 |
проблема была решена. Кому интересно, вот решение: на серверной стороне дописываем
и в бине маппинга добовляем наш интерсептор <ref bean="wsSecurityInterceptor"/> и теперь каждому методу endpoint-a поставим ограничения по правам таким способом: @Secured({"ROLE_SERVER_ADMIN", "ROLE_MAIN_ADMIN", "ROLE_SUPER_ADMIN"}) примерно так. Тема закрыта Это сообщение отредактировал(а) Vladus - 28.5.2009, 17:42 |
|||
|
||||
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Вот и отлично! По-моему это я тебе и говорил...
спасибо за код. Будем знать. Для закрытия галочку выбери -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| Vladus |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 1.2.2008 Репутация: 1 Всего: 4 |
Вообще говоря я провел достаточно много времени, разбираясь с этой задачей, потому было бы честно рассказать про все проблемы, с которыми я столкнулся. Забыл это сделать сразу, сделаю щас, пользуясь случаем:
1) Если у вас фабрика месседжей - axiom, то <bean id="messageFactory" class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory" p:soapVersion="SOAP_12" p:payloadCaching="true"/> p:payloadCaching="true" - обязательно нужно ставить true. Вы потеряете в перформансе, но по другому работать не будет. цитата из дока
оно может быть прочитано только раз. При обработке самого сообщения интерсептор не раз разбирает ваш месседж, в следствии чего вываливает эксепшен, даже не дойдя до самого эндпойнта 2)Если вы, как и я, решили использовать Wss4jSecurityInterceptor <bean id="wsSecurityInterceptor" class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor"> <property name="validationCallbackHandler" ref="springSecurityHandler"/> <property name="validationActions" value="UsernameToken"/> </bean> то обратите внимание, что хендлер для него (SpringPlainTextPasswordValidationCallbackHandler в моем случае - специально для связки ws+security) есть как из пакета wss4j, так и из пакета xwss. Если подставите не тот - будут проблемы. Очень тупая ошибка, но так сразу можно и не заметить. 3) authenticationManager. <bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager"> <property name="providers"> <bean class="org.springframework.security.providers.dao.DaoAuthenticationProvider"> <property name="passwordEncoder" ref="passwordEncoder"/> <property name="userDetailsService" ref="userHibernateDAO"/> </bean> </property> </bean> Энкодер естественно нужно ставить не всегда, только тогда, когда вы храните пароль в базе закодированным Далее, userDetailsService - необходимо дао, имплементирующее UserDetailsService. Ну и на закуску. Вот кусочек из моего контекстника для секьюрити
захотелось мне все упростить и централизировать. Я распарсил данный бин айдией, получил его айдишник - _authenticationManager. Попытался подставить его в wsSecurityInterceptor, в качестве validationCallbackHandler. Все без проблем собралось, томкат запустился не ругаяясь, но аутенфицироваться я так и не смог. В проблеме разбираться не стал, но решил предупредить. Не повторяйте моих ошибок |
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |