У меня есть весенний MVC 4 с весенним программным обеспечением безопасности, развернутым на websphere 8.5. Общий сервер говорит server123. Я обращаюсь к приложению как к https-приложению для корпоративного доменного имени F5.Идентификатор сеанса постоянно меняется для каждого запроса с защитой https и весной в браузере IE
У меня есть эта странная проблема, когда идентификатор сеанса постоянно меняется на каждый запрос сервлета. Это вызывает бесконечный цикл переадресации в IE. Однако это работает на chrome и firefox.
Я вызываю свое приложение, как показано ниже, где приложения/MyApp/является корнем контекста. MainPage - это URL-адрес запроса контроллера, адрес https://example.server.com/apps/MyApp/MainPage.
Я также настроил аутентификацию SSO с помощью UserNamePasswordAuthenticationFilter, которая перехватывает перенаправление auth url/loginSSO. Как только аутентификация будет успешной, прямой путь/MainPage будет потерян в IE и повторно перенаправлен на https://example.server.com/apps/MyApp/ и https://example.server.com/apps/MyApp/loginSSO. Ниже приведены данные моей конфигурации безопасности.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/loginSSO").permitAll();
http.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin()
.loginPage("/loginSSO")
.successHandler(successHandler())
.and()
.csrf()
.csrfTokenRepository(csrfTokenRepository())
.and()
.addFilterBefore(new CookieFilter(),
ChannelProcessingFilter.class)
.addFilterAfter(new CSRFFilter(), CsrfFilter.class)
.addFilterBefore(authFilter(),
UsernamePasswordAuthenticationFilter.class)
.requiresChannel()
.channelProcessors(
Arrays.<ChannelProcessor> asList(
new InsecureChannelProcessor(),
new SecureChannelProcessor()));
http.portMapper().http(8080).mapsTo(8443).http(80).mapsTo(44)
.http(9080).mapsTo(9443).http(7777).mapsTo(7443);
}
/**
* Auth filter.
*
* @return the auth filter
*/
@Bean
public AuthFilter authFilter() {
AuthFilter authFilter = new AuthFilter();
try {
authFilter
.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(
"/loginSSO"));
authFilter.setAuthenticationManager(authenticationManager());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return authFilter;
}
@Autowired
@Qualifier("customUserDetailsService")
UserDetailsService userDetailsService;
@Bean
public SavedRequestAwareAuthenticationSuccessHandler successHandler() {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("targetUrl");
return successHandler;
}
@Autowired
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
/**
* Csrf token repository.
*
* @return the csrf token repository
*/
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setSessionAttributeName("_csrf");
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
}
Эта проблема возникает только на корпоративных серверах, а не на моем localhost – Srivatsan
. Моя первая предпосылка - это старая версия IE + корпоративные прокси-эффекты. –