복붙노트

[SPRING] 소셜 공급자를 사용하여 성공한 로그인 후 리디렉션 URL을 설정하는 방법

SPRING

소셜 공급자를 사용하여 성공한 로그인 후 리디렉션 URL을 설정하는 방법

트위터와 같이 Spring Social Providers 중 일부를 사용하여 내 사용자가 로그인 한 경우 리디렉션 URL을 변경해야합니다.

나는 모든 세트 ***에 들어가고있다. Url ( "") 널 포인터 예외 이것을 설정하는 어떤 때는 너무 효과가 없습니다.

나는 지금까지 설정을 시도 :

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;
    }

나는 setPostSignInUrl과 setApplicationUrl 각각을 개별적으로 시도했다.

또한 시도 :

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

저는 이것을하기 위해 Security와 함께 Spring Social 쇼케이스를 사용하고 있습니다. 필요한 경우 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());
    }

해결법

  1. ==============================

    1.이 시도:

    이 시도:

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

    그런 다음 configure 메소드를 변경하십시오.

    .apply(getSpringSocialConfigurer());
    
  2. ==============================

    2.Spring Social의 경우 게시 로그인 URL을 "/ home"과 같은 기본 URL로 구성 할 수 있습니다.

    Spring Social의 경우 게시 로그인 URL을 "/ home"과 같은 기본 URL로 구성 할 수 있습니다.

    그러나 특정 상황에서는 사용자를 다른 URL로 안내하려고합니다. 로그인 성공 후 리디렉션 URL을 동적으로 변경하려면 SignInAdapter 구현 클래스의 signIn 메서드에서 원하는 URL을 나타내는 String을 반환하면됩니다.

    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
        }
    }
    

    나는 Spring Social 버전 1.1.0.RELEASE를 사용하여 이것을 검증했다.

  3. from https://stackoverflow.com/questions/24439777/how-to-set-redirect-url-after-success-login-using-social-providers by cc-by-sa and MIT license