Spring MVC + security + OAuth2 userInfoEndpoint () не работает - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь войти в систему как Spring MVC + security + OAuth2.

Текущий статус аутентификации успешно получен и информация о пользователе может быть получена.

Я хочу получить пользователя поэтому я пишу userInfoEndpoint, но userInfoEndPoint вообще не вызывается.

С другой стороны, successHandler успешно вызывается, и аутентификация содержит информацию о пользователе.

Итак У меня два вопроса

Во-первых, почему вообще не вызывается userInfoEndpoint? В случае Spring Boot он успешно называется

Во-вторых, как получить информацию о пользователе из аутентификации successHandler? Аутентификация successHandler имеет только этот метод.

Object getCredentials();
Object getDetails();
Object getPrincipal();
boolean isAuthenticated();
void setAuthenticated(boolean var1) throws IllegalArgumentException;

- Исходный код -

SecurityConfig. java

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
            .authorizeRequests()
                .antMatchers("/*").permitAll()
                .and()
            .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/")
                .and()
            .oauth2Login()
                .userInfoEndpoint()
                    .userService(customOAuth2UserService)
                    .and()
                .successHandler(new SuccessHandler());
}

SuccessHandler. java

@Log4j
public class SuccessHandler implements AuthenticationSuccessHandler {

    @Override
    public void onAuthenticationSuccess(HttpServletRequest httpServletRequest,
                                        HttpServletResponse httpServletResponse,
                                        Authentication authentication) throws IOException, ServletException {
        log.info(authentication);
    }

}

1 Ответ

0 голосов
/ 05 апреля 2020

Можете ли вы попробовать изменить последовательность, подобную этой, в SecurityConfig. java:

@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
        .oauth2Login()
            .userInfoEndpoint()
                .userService(customOAuth2UserService)
                .and()
        .authorizeRequests()
            .antMatchers("/*").permitAll()
            .and()
        .logout()
            .logoutUrl("/logout")
            .logoutSuccessUrl("/")
            .and()            
       .successHandler(new SuccessHandler());
}

Поскольку приведенный ниже код разрешает все URL-адреса и из-за чего код oauth2Login () никогда не доступен.

.authorizeRequests()
            .antMatchers("/*").permitAll()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...