#spring #spring-security
#spring #spring-безопасность
Вопрос:
Я пытаюсь настроить авторизацию предварительной аутентификации с помощью Spring Security, аналогично site minder, где внешняя система выполняет аутентификацию и сохраняет регистрационную информацию в файле cookie. Однако для этого мне нужно перенаправить на внешний URL.
Я попытался сделать это из реализации AbstractPreAuthenticatedProcessingFilter
, но это не сработало, потому HttpServletResponse
что объект недоступен.
Более подходящим способом, по-видимому, является просто добавление пользовательского фильтра, который проверяет наличие файлов cookie и выполняет перенаправление, и как только файлы cookie будут доступны, затем передает управление Spring Security filter. Как я могу зарегистрировать этот пользовательский фильтр в приложении Spring Security на основе конфигурации Java? Любая помощь будет оценена.
Ответ №1:
Обычным способом является перенаправление пользователя на внешний интерфейс аутентификации AuthenticationEntryPoint
, например LoginUrlAuthenticationEntryPoint
, с помощью. Точка входа автоматически вызывается Spring Security всякий раз, когда она определяет, что пользователю необходимо пройти аутентификацию.
Как только пользователь вернется обратно в ваше приложение, он должен попасть в пользовательский фильтр, который расширяет AbstractPreAuthenticatedProcessingFilter
и извлекает имя пользователя из вашего файла cookie / заголовка / токена (возможно, после некоторых проверок достоверности и целостности) в методе getPreAuthenticatedPrincipal
.
Конфигурация Spring может быть похожа на:
<security:http entry-point-ref="externalAuthentication">
<security:custom-filter after="BASIC_AUTH_FILTER" ref="cookieAuthentication"/>
<security:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY"/>
</security:http>
<bean id="externalAuthentication" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<constructor-arg value="http://server.local/authenticationService"/>
</bean>
<bean id="cookieAuthentication" class="custom class extending org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter">
...
</bean>