Форма входа в Spring Security 3.0 Переадресация на внешние ресурсы - PullRequest
3 голосов
/ 09 ноября 2010

Может ли тег form-login использовать URL-адреса для внешних ресурсов?

У меня есть две веб-службы, работающие в разных контекстах приложения [Случай № 1].Они также могут быть на разных машинах [Дело № 2].

Я хочу, чтобы первая служба использовала Spring Security для принудительной аутентификации для определенных методов.Я хочу, чтобы второй сервис использовался в качестве механизма аутентификации.Если запрос не аутентифицирован, когда он пытается вызвать защищенный метод в первой службе, запрос должен быть перенаправлен во вторую службу для аутентификации.

Обе службы работают и работают.У меня настроена и работает «первая» первая служба, за исключением URL-адреса, по которому она перенаправляет запрос, когда пользователь еще не аутентифицирован.

Если первая веб-служба расположена на http://server1/community, может ли Spring Security переслатьпользователь другой службы, работающей в отдельном контексте?

Пример:

<security:form-login 
    login-page="/auth/login.jsp" />

, где /auth - контекст второй службы.

Или, можетвообще переслать на другой сервер?

<security:form-login 
    login-page="http://server2/auth/login.jsp" />

Когда я попытался выполнить первую конфигурацию, указанную выше, URL-адрес переадресации стал http://server1/community/auth/login.jsp.Я хотел http://server1/auth/login.jsp.

Вторая конфигурация дала http://server1/communityhttp://server2/auth/login.jsp.

Очевидно, что URL-адреса взяты относительно текущего контекста.Есть ли способ изменить это поведение?Или есть лучший способ сделать то, что я пытаюсь сделать, и я просто еще не наткнулся на это?^ __ ^

Спасибо за вашу помощь!

- JS

PS: Я опубликовал это ранее как «Ответ» на предыдущее сообщение по ошибке.К сожалению.

Ответы [ 2 ]

1 голос
/ 16 ноября 2010

Да, есть способ сделать то, что вы хотите. Вам нужно ключевое слово login-processing-url для элемента form-login.

Пример:

<form-login login-page="/auth/login" login-processing-url="/auth/example_security_check"/>

Затем на своей странице JSP вы хотите установить действие, которое вы положили туда:

<form action="example_security_check" method="post">
    <label for="j_username">Login</label>:
    <input id="j_username" name="j_username" size="20" maxlength="50" type="text"/>
    <br/>

    <label for="j_password">Password</label>:
    <input id="j_password" name="j_password" size="20" maxlength="50" type="password"/>
    <br/>

    <input type="submit" value="Login"/>
    <br/>
    <br/>

    <input id="_spring_security_remember_me" name="_spring_security_remember_me" type="checkbox" value="true"/>
    <label for="_spring_security_remember_me">Remember Me?</label>
</form>

Документация по атрибуту находится здесь

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-namespace.html

1 голос
/ 12 ноября 2010

Полагаю, вы можете перезаписать класс LoginUrlAuthenticationEntryPoint и вместо использования тега вручную добавить необходимые элементы в конфигурацию

См. form-login doku для необходимых элементов. это только UsernamePasswordAuthenticationFilter и LoginUrlAuthenticationEntryPoint. Я полагаю, вы можете использовать тег custom-filter для добавления фильтра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...