Регистрация пользовательского фильтра Spring Security в конфигурации Java

#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>