Spring Security Facebook Oauth2重定向到主页

时间:2018-12-26 19:05:43

标签: spring facebook spring-boot oauth-2.0

在基本的Facebook身份验证之后,我无法将用户重定向到上一页。相反,我被重定向到主页。我正在遵循https://spring.io/guides/tutorials/spring-boot-oauth2/

中提到的示例

这是我的结构:

enter image description here

SocialController:

@RestController
public class SocialController {

    @GetMapping("/user")
    public Principal user(Principal principal) {
        return principal;
    }

}

test.html:

<div class="container unauthenticated">
    With Facebook: <a href="login">click here</a>
</div>
<div class="container authenticated" style="display:none">
    Logged in as: <span id="user"></span>
</div>

<script>
 $.get("/user", function(data) {
        console.log("Inside users: " + data);
        $("#user").html(data.userAuthentication.details.name);
        $(".unauthenticated").hide()
        $(".authenticated").show()
    });
</script>

主要方法:

@SpringBootApplication
@EnableOAuth2Sso
public class IvanstanevPortfolioApplication extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/css/**", "/js/**", "/img/**", "/audio/**" , "/" ,"/index","/contacts","/about_me","/test")
                .permitAll()
                .anyRequest()
                .authenticated();
    }


    public static void main(String[] args) {
        SpringApplication.run(IvanstanevPortfolioApplication.class, args);
    }

}

基本上,我想从Facebook检索用户名,并停留在他所在的页面(test.html)。相反,我被重定向到主页。花了整整一整天,找不到解决方案。 :\

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,只是用户需要每次都返回同一页面而不是返回最后一页。

您可以说重定向页面是硬编码的...但这可能有帮助

  • 从包org.springframework.social.connect.web

  • 创建一个实现SignInAdapter的类
  • 此类应@Override的signIn方法,并且此方法必须返回String此字符串表示您要转到的重定向资源。

  • 如果您要重定向到首页,则只需返回null 即可。

    @Service
    public class FacebookSignInAdapter implements SignInAdapter {
      @Override
      public String signIn(
            String localUserId,
            Connection<?> connection,
            NativeWebRequest request) {
    
        SecurityContextHolder.getContext().setAuthentication(
                new UsernamePasswordAuthenticationToken(
                        connection.getDisplayName(), null,
                        Arrays.asList(new SimpleGrantedAuthority("FACEBOOK_USER"))));
    
        return "/form";
      }
    }
    

有关详细信息,这里是有用的指南: https://www.baeldung.com/facebook-authentication-with-spring-security-and-social