2014-06-26 24 views
5

Potrzebuję zmienić adres URL przekierowania, gdy mój użytkownik jest zalogowany, korzystając z niektórych usług Spring Social Providers, takich jak Twitter w tym przypadku.Jak ustawić adres URL przekierowania po zalogowaniu się przy użyciu dostawcy usług społecznościowych

Dostaję w każdym zestawie *** Url ("") null pointer wyjątek Czasami ustawienie to nie działa zbyt

próbowałem dotąd ustawienie:

public ProviderSignInController signInController(ConnectionFactoryLocator connectionFactoryLocator, 
                UsersConnectionRepository usersConnectionRepository) { 
     ProviderSignInController providerSignInController = new ProviderSignInController(connectionFactoryLocator, 
       usersConnectionRepository, 
       new CSignInAdapter(requestCache())); 
     providerSignInController.setPostSignInUrl("/home"); 
     providerSignInController.setApplicationUrl("localhost:8080/home"); 
     return providerSignInController; 
    } 

Próbowałem oddzielnie każdego z setPostSignInUrl i setApplicationUrl.

próbował również:

@Bean 
    public ConnectController connectController(ConnectionFactoryLocator connectionFactoryLocator, 
               ConnectionRepository connectionRepository) { 
     ConnectController connectController = new ConnectController(connectionFactoryLocator, connectionRepository); 
     connectController.addInterceptor(new TweetAfterConnectInterceptor()); 
     connectController.setApplicationUrl("/home"); 
     return connectController; 
    } 

Używam showcase Wiosna Społecznej z bezpieczeństwem jako podstawy, aby to zrobić. W razie potrzeby jestem delegowania konfigurację HttpSecurity:

@Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
       .formLogin() 
       .loginPage("/signin") 
       .loginProcessingUrl("/signin/authenticate") 
       .failureUrl("/signin?param.error=bad_credentials") 
       .defaultSuccessUrl("/home") 
       .and() 
       .csrf() 
       .and() 
       .logout() 
       .logoutUrl("/signout") 
       .deleteCookies("JSESSIONID") 
       .and() 
       .authorizeRequests() 
       .antMatchers("/admin/**", "/favicon.ico", "/resources/**", "/auth/**", "/signin/**", "/signup/**", 
         "/disconnect/facebook").permitAll() 
       .antMatchers("/**").authenticated() 
       .and() 
       .rememberMe() 
       .and() 
       .apply(new SpringSocialConfigurer()); 
    } 

Odpowiedz

4

Spróbuj tego:

private SpringSocialConfigurer getSpringSocialConfigurer() { 
     SpringSocialConfigurer config = new SpringSocialConfigurer(); 
     config.alwaysUsePostLoginUrl(true); 
     config.postLoginUrl("/home"); 

     return config; 
} 

Następnie zmień metodę Configure

.apply(getSpringSocialConfigurer()); 
+0

Witajcie, mam tu wątpliwości. Otrzymam dynamiczny adres URL. jak this.config.postLoginUrl ("/ event? eventid = 4"). ten numer identyfikacyjny zdarzenia zmieni się dynamicznie. Czy to możliwe? –

+0

proszę wyjaśnić mi powyższe pytanie. kiedy masz czas. –

0

na wiosnę Społecznych, można skonfigurować adres URL logowania do domyślnego adresu URL, na przykład "/ home".

Jednak pod pewnymi warunkami użytkownik powinien skierować użytkownika na inny adres URL. Aby dynamicznie zmieniać przekierowanie Po pomyślnym zalogowaniu, można po prostu wrócić ciągiem reprezentującym dowolny URL chcecie w sposób signin swojej klasie realizacji SignInAdapter:

import org.springframework.social.connect.web.SignInAdapter; 

public class SocialSignInAdapter implements SignInAdapter { 

    public String signIn(String localUserId, Connection<?> connection, NativeWebRequest request) { 
     boolean flag = true; 
     if (flag) {   
      return "/a_different_url"; 
     } 
     return null; // Default, which means using the default post login URL 
    } 
} 

I weryfikowane przy użyciu tej wersji Wiosna Social 1.1.0 .ZWRÓĆ