Сбой входа в Spring Security при переносе проектов Spring mvc в Spring boot
Я перенес рабочий проект Spring mvc в Spring boot. См. Раздел 81.3 этого документа и этот вопрос. Модули работают нормально, но SpringSecurity не может войти в систему.
При открытии, когда домашняя страница перейдет на страницу входа в систему, а затем войдите в систему после того, как домашняя страница и страница входа в систему повторно перенаправляют 302 ответа HTTP, а затем возникает ошибка ERR_TOO_MANY_REDIRECTS.
После отладки, когда я вхожу в систему, Custom UserDetailsService может правильно найти и вернуть UserDetails, CustomULLAuthenticationSuccessHandler также обычно вызывает onAuthenticationSuccess,но в цепочке фильтров в вызове FilterSecurityInterceptor этот фильтр очищается, состояние входа SpringSecurity очищается, я и не вызывает выход из HTTP запрос. Я тщательно проверяю это в наборе create-session = "stateless"
Ясно, что статус входа нормальный, но кажется, что мое приложение не может быть правильно повторно авторизовано. После того, как запрос был SecurityContextHolder.getContext().GetAuthentication().GetPrincipal()
is anonymousUesr (файлы cookie успешно переданы loginKey = b3668242-574a-498e-bd03-243e28dc805c; SESSIONID_HAP = 98963370-8561-40a2-9898-a5e80f7d1186
).
Этот проект более сложный, нижеследующее является важной частью конфигурации и кода, и их роль в основном является оригинальной и эквивалентной.
SpringBootConfigure.java SpringBoot введите точку.
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
@ImportResource({"classpath:/spring/applicationContext*.xml","classpath:/spring/appServlet/servlet*.xml"})
public class SpringBootConfigure {
...
}
Конфигурация Spring Security XML
<http access-decision-manager-ref="accessDecisionManager">
<csrf disabled="true"/>
<intercept-url pattern="/login" access="permitAll" />
<intercept-url pattern="/login.html" access="permitAll" />
<intercept-url pattern="/verifiCode" access="permitAll" />
<intercept-url pattern="/common/**" access="permitAll" />
<intercept-url pattern="/boot/**" access="permitAll" />
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
<access-denied-handler error-page="/403.html"/>
<form-login login-page='/login' authentication-success-handler-ref="successHandler"
authentication-failure-handler-ref="loginFailureHandler"/>
<custom-filter ref="captchaVerifierFilter" before="FORM_LOGIN_FILTER"/>
<logout logout-url="/logout"/>
<headers defaults-disabled="true">
<cache-control/>
</headers>
</http>
<beans:bean id="loginFailureHandler" class="com.hand.hap.security.LoginFailureHandler"/>
<beans:bean id="accessDecisionManager" class="org.springframework.security.access.vote.UnanimousBased">
<beans:constructor-arg>
<beans:list>
<beans:bean class="org.springframework.security.web.access.expression.WebExpressionVoter"/>
</beans:list>
</beans:constructor-arg>
</beans:bean>
<authentication-manager>
<authentication-provider user-service-ref="customUserDetailsService">
<password-encoder ref="passwordManager"/>
</authentication-provider>
</authentication-manager>
<beans:bean id="captchaVerifierFilter" class="com.hand.hap.security.CaptchaVerifierFilter">
<beans:property name="captchaField" value="verifiCode"/>
</beans:bean>
<beans:bean id="successHandler" class="com.hand.hap.security.CustomAuthenticationSuccessHandler">
<beans:property name="defaultTargetUrl" value="/index"/>
</beans:bean>