成功通过身份验证后,successForwardUrl无法与Spring Social一起使用

时间:2019-06-17 18:52:43

标签: spring-boot spring-social

我正在与Spring Social集成一个Spring Boot项目。成功通过google进行身份验证后,我想重定向到端点/userInfo,但似乎重定向到我向Google进行身份验证请求的上一页:http://localhost:8080/auth/google

我还尝试创建一个CustomAuthenticationSuccessHandler豆,该豆实现了AuthenticationSuccessHandler并将其添加到配置文件中,但是它也不起作用

我的WebSecurityConfiguration:

@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    DataSource dataSource;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    // This bean is load the user specific data when form login is used.
    @Override
    public UserDetailsService userDetailsService() {
        return userDetailsService;
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    // Enable jdbc authentication
    @Autowired
    public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication()
                .dataSource(dataSource)
                .passwordEncoder(passwordEncoder())
                .usersByUsernameQuery("select user_name, encryted_password"
                        + " from app_user where user_name=?");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.csrf().disable();

        // Pages do not require login
        http.authorizeRequests()
                .antMatchers("/", "/signup", "/login", "/logout")
                .permitAll();

        http.authorizeRequests()
                .antMatchers("/user/**")
                .access("hasRole('" + AppRole.ROLE_USER + "')");

        // For ADMIN only.
        http.authorizeRequests()
                .antMatchers("/admin/**")
                .access("hasRole('" + AppRole.ROLE_ADMIN + "')");

        // When the user has logged in as XX.
        // But access a page that requires role YY,
        // AccessDeniedException will be thrown.
        http.authorizeRequests()
                .and()
                .exceptionHandling()
                .accessDeniedPage("/403");

        // Form Login config
        http.authorizeRequests()
                .and()
                .formLogin()
                .loginProcessingUrl("/j_spring_security_check") // the url to submit the username and password to
                .loginPage("/login") // the custom login page
                .successForwardUrl("/userInfo") // the landing page after a successful login
                .failureUrl("/login?error=true") // the landing page after an unsuccessful login
                .usernameParameter("username")
                .passwordParameter("password");

        // Logout Config
        http.authorizeRequests()
                .and()
                .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/logoutSuccessful");


        http.apply(new SpringSocialConfigurer())
                .signupUrl("/signup");

    }

}

MyController:

@RestController
@Transactional
public class MainController {

    @Autowired
    private AppUserDAO appUserDAO;

    @Autowired
    private ConnectionFactoryLocator connectionFactoryLocator;

    @Autowired
    private UsersConnectionRepository userConnectionRepository;

    @Autowired
    private AppUserValidator appUserValidator;

    @RequestMapping(value = {"/", "/welcome"}, method = RequestMethod.GET)
    public String welcomePage(Model model) {
        model.addAttribute("title", "Welcome");
        model.addAttribute("message", "This is welcome page!");
        return "welcomePage";
    }

    @RequestMapping(value = "/logoutSuccessful", method = RequestMethod.GET)
    public String logoutSuccessfulPage(Model model) {
        model.addAttribute("title", "Logout");
        return "logoutSuccessfulPage";
    }

    @RequestMapping(value = "/userInfo", method = RequestMethod.GET)
    public String userInfo(Model model, Principal principal) {

        // After user login successfully.
        String userName = principal.getName();

        System.out.println("User Name: " + userName);

        UserDetails loginedUser = (UserDetails) ((Authentication) principal).getPrincipal();

        String userInfo = WebUtils.toString(loginedUser);
        model.addAttribute("userInfo", userInfo);

        return "userInfoPage";
    }

使用Spring Social登录后,是否有任何方法可以转发到/userInfo网址?

1 个答案:

答案 0 :(得分:0)

在POST中尝试“ / userInfo”返回“重定向:/ userInfoPage”。