1

websphere 8.5共有サーバーのserver123にSpringセキュリティアプリケーションがデプロイされた春のMVC 4があります。企業のF5ドメイン名でhttpsアプリケーションとしてアプリケーションにアクセスします。IEのブラウザでhttpsと春のセキュリティでリクエストごとにセッションIDが変更され続けています

セッションIDがすべてのサーブレットリクエストで変更され続けるこの奇妙な問題があります。これは、IE上で無限のリダイレクトループを引き起こします。しかし、これはchromeとfirefoxで動作します。

私はapps/MyApp /がコンテキストルートである以下のように私のアプリケーションを起動します。MainPageはコントローラ要求マッピングのURLですhttps://example.server.com/apps/MyApp/MainPageです。

また、Springリダイレクトのauth url/loginSSOを傍受するUserNamePasswordAuthenticationFilterでSSO認証を設定しました。認証が成功すると、フォワードパス/メインページは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; 
} 

}

+0

この問題はローカルサーバーでのみ発生し、ローカルホストでは発生しません – Srivatsan

+0

私の最初の推測は古いIEバージョン+企業プロキシの副作用です。 –

答えて

-2

この問題は解決されました。 Websphere application.xmlファイルのアプリケーション・コンテキスト・ルート構成に関する問題が発生しました。

+1

これは有効な答えではありません。あなたはもっと開発しなければなりません。私は同じ問題に直面しており、あなたはそれを修正するために何をしたのかについて何の情報も与えていません。 – lpratlong

+0

遅れて申し訳ありません。 EARファイルのコンテキスト・ルートで発生した問題は、Websphereに正しくマップされていませんでした。そのため、セッション状態を維持するためにjSession Cookieコンテキストルートがブラウザに正しく設定されていませんでした。サーバー上のコンテキストルートを修正した後、それは機能しました。 – Srivatsan

関連する問題