Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring security and EJB как настроить?


Автор: acvilon 19.11.2009, 16:53
Товарищи. Подскажите как настроить авторизацию и аутентификацию в Spring Security через ejb? 

Автор: acvilon 19.11.2009, 22:55
Опишу ситуацию поподробнее:
Я разрабатываю приложение, web часть пишется с использованием спринга. Backend часть пишется на ejb. В конфиг спринга настраиваю для инжекта ejb. Теперь вопрос: Как настроить авторизацию и аутентификацию с использованием spring security через ejb. Т.к. напрямую web часть не может лазить в базу. Товарищи, помогите пожалуйста!!! 

Автор: MisterCleric 19.11.2009, 23:31
привет. Мне что-то лень все раскладывать по полочкам: надеюсь по английски читать можешь. Наведу на мысль цитатой из Spring Security Reference
Цитата

5.3.3. AuthenticationProvider

The last player in the Spring Security authentication process is an AuthenticationProvider. Quite simply, it is responsible for taking an Authentication request object and deciding whether or not it is valid. The provider will either throw an exception or return a fully populated Authentication object. Remember our good friends, UserDetails and UserDetailsService? If not, head back to the previous section and refresh your memory. Most AuthenticationProviders will ask a UserDetailsService to provide a UserDetails object. As mentioned earlier, most application will provide their own UserDetailsService, although some will be able to use the JDBC or in-memory implementation that ships with Spring Security. The resultant UserDetails object - and particularly the GrantedAuthority[]s contained within the UserDetails object - will be used when building the fully populated Authentication object.

After the authentication mechanism receives back the fully-populated Authentication object, it will deem the request valid, put the Authentication into the SecurityContextHolder, and cause the original request to be retried (step seven above). If, on the other hand, the AuthenticationProvider rejected the request, the authentication mechanism will ask the user agent to retry (step two above).


Если в двух словах, я бы посмотрел в сторону DaoAuthenticationProvider и на свою имплементацию UserDetailsService, который уже и будет делать вызов бизнес-метода логина на твоем EJB и строить UserDetails по тому, что ты вернешь в этом методе.
Но тут, конечно, может всплыть такой вопрос: нужен ли потом тебе этот принципал на уровне EJB при дальнейших операциях: sessionContext.getCallerPrincipal?

Автор: acvilon 20.11.2009, 15:58
Цитата

MisterCleric, Мне что-то лень все раскладывать по полочкам.


Был бы очень благодарен, если бы ты по шагам написать, что примерно надо сделать. Spring Security Reference - надо конечно почитать, но как-то в доке хреновенько все описано. Меня вот пока интересует аутентификацию юзеров. Потом, через некоторое врем я заинтересуюсь авторизацией.

Заранее спс.  smile 

Автор: MisterCleric 20.11.2009, 16:07
 smile Не, так не годиться. Если честно, то я его учил как раз по этому референсу и уже два проекта в эксплуатацию со Spring Security пошло.
Надо почитать и посмотреть примеры, что идут с дистрибутивом.
Если умеешь с WEB-уровня вызывать EJB, то проблем у тебя не должно составить.
Надо сначала что-то написать и привести тут код, где не сходится: все за тебя мы делать не будем

Автор: acvilon 20.11.2009, 18:17
Ладно-ладно. Все я и не просил. smile Будем-с читать, просто интересно много ли надо переписывать для получения нужного результата?!

Автор: MisterCleric 20.11.2009, 18:20
надо токо реализовать свой UserDetailsService

Автор: acvilon 20.11.2009, 18:28
А еще такой вопрос, лучше читать доку сразу по версии 3.0 или предыдущую? Третья вроде еще не вышла.

Автор: MisterCleric 20.11.2009, 18:32
у меня 2.0.5

Автор: acvilon 24.11.2009, 01:48
MisterCleric, я тут поразбирался. Возникло много вопросов.
1) Форма логина сабмититься аяксом, в ответ также ожидается ajax(ответ - урл на который следует перейти). Я так понимаю для такого решения придется переписать AuthenticationProcessingFilter?

2) UserName у меня может быть логином или email. То есть аутентифицироваться можно и по логину, и по email'у. Насколько я понял, надо имплементировать UserDetails и соответственно добавить нужные поля, конечно странно что в стандартном интерфейсе подразумевается только username! Также придется написать свой UserDetailsService. Я пока не разобрался хватит ли DaoAuthenticationProvider или придется отнаследоваться от него и переписать то, что надо. 

Что можешь посоветовать?  smile 

Автор: MisterCleric 24.11.2009, 11:14
Привет. Попробую ответить.
1. То что у тебя аякс, ничего не меняет: все-равно на сервер уезжает HTTP-запрос. У тебя должна быть форма структуры
Код

<input name='j_username'/>
<input type='password' name='j_password'/>


Ну и аяксовый запрос должен отправлять на УРЛ j_spring_security_check
Правда, действительно придется посмотреть на AuthenticationProcessingFilter, так как там возможны редиректы при неуспехе аутентификации...
2. То что у тебя UserName может быть и тем и другим ничего не меняет. Spring принимает из реквеста указанные выше параметры. Потом они передаются в AuthenticationManager, который отделегирует твоему AuthenticationProvider для получения UserDetails.
3. Все остальное как определить пользователя - по логину или email - это ты уже решаешь на уровне своего UserDetailsService

Немного фантазии и смелости - и усе получится

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)