Предварительная аутентификация / вход в Spring Security
Я выполнил проверку концепции Spring Security, чтобы выполнить предварительную аутентификацию с использованием фильтра PRE_AUTH_FILTER. Это работало хорошо, но я хотел бы знать, могу ли я перенаправить на страницу входа, если этот фильтр не работает, потому что я получаю HTTP 403.
Я имею в виду, если первоначальный запрос не содержит поле SM_USER в заголовке, как я могу перенаправить на страницу входа? Мне нужно рассмотреть эти два сценария (когда он содержит поле - SM_USER -, а когда нет), и я не смог заставить его работать. Есть идеи по этому поводу?
2 ответа
Pra-аутентификация работает без проблем с аутентификацией при входе в Spring Security. Вы просто настраиваете рабочую конфигурацию формы входа и добавляете фильтр PRE_AUTH_FILTER.
Spring только перенаправляет на страницу входа, если после прохождения фильтров аутентификации он обнаруживает, что пользователь не аутентифицирован, когда он должен быть. Таким образом, если запрос содержит ожидаемое поле в заголовке, пользователь будет аутентифицирован фильтром PRE_AUTH_FILTER и не перейдет на страницу входа. Но если он не содержит его, Spring Security обнаружит отсутствие аутентификации и перенаправит на страницу входа.
Это мои настройки:
<http auto-config="true" use-expressions="true" entry-point-ref="http403EntryPoint">
<intercept-url pattern="/login" access="permitAll" />
<intercept-url pattern="/logout" access="permitAll" />
<intercept-url pattern="/accessdenied" access="permitAll" />
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
<custom-filter before="PRE_AUTH_FILTER" ref="siteminderFilter" />
<form-login login-page="/login" default-target-url="/list" authentication-failure-url="/accessdenied" />
<logout logout-success-url="/logout" />
</http>
<beans:bean id="siteminderFilter" class="org.springframework.security.web.authentication.preauth.RequestHeaderAuthenticationFilter">
<beans:property name="principalRequestHeader" value="SM_USER"/>
<beans:property name="authenticationManager" ref="authenticationManager" />
<beans:property name="exceptionIfHeaderMissing" value="false" />
</beans:bean>
<beans:bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
<beans:property name="preAuthenticatedUserDetailsService">
<beans:bean id="userDetailsServiceWrapper" class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
<beans:property name="userDetailsService" ref="customUserDetailsService"/>
</beans:bean>
</beans:property>
</beans:bean>
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="employeeDAO" />
<authentication-provider ref="preauthAuthProvider" />
</authentication-manager>
<beans:bean id="customUserDetailsService" class="com.test.security.CustomUserDetailsService"></beans:bean>
<beans:bean id="http403EntryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"></beans:bean>