Как получить все атрибуты из java.security.Principal? - PullRequest
0 голосов
/ 19 октября 2019

Я изучаю безопасность Spring и пишу простое веб-приложение с Spring Security 5 и OAuth2 Login. Я хочу получить информацию от Principal (электронная почта, имя пользователя и т. Д.), Но не могу найти какой-либо метод для этого. Напишите немного JSON-parser не лучшая идея, потому что я почти уверен, что есть какой-то метод для получения данных учетной записи пользователя.

Конфиг

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated()
                .and().oauth2Login();
    }
}

Контроллер

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.security.Principal;

@Controller
public class HomeController {

    @GetMapping({"", "/"})
    @ResponseBody
    public Principal getHome(Principal principal) {
        return principal;
    }

}

Application.yml

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: xyz1
            client-secret: secret1
          facebook:
            client-id: xyz2
            client-secret: secret2
          github:
            client-id: xyz3
            client-secret: secret3

1 Ответ

0 голосов
/ 19 октября 2019

Создайте новый объект, представляющий подмножество данных, которые вы хотите вернуть из источника, т. Е. Источник этих деталей имеет несколько значений, поэтому используйте некоторый список или набор или карту для хранения этих данных и их представления, как вы упоминали, что выработа с OAuth2:

 @RequestMapping("/user")
    public Authentication user(OAuth2Authentication authentication) {
        LinkedHashMap<String, Object> details = (LinkedHashMap<String, Object>) authentication.getUserAuthentication().getDetails();
        return details.get("email");
    }
...