У меня проблемы с добавлением пользовательских разрешений из нашей локальной базы данных в мой объект Spring Security Principal.
Мои цели для нашей безопасности состоят в следующем:
- Аутентификация с помощью OAuth2 от нашей компании (выполнено)
- Запрос нашей локальной базы данных и сбор разрешений пользователей (запрос написан)
- Добавить этот список разрешений для моего основного объекта для использования в приложении
Я бы предпочел, чтобы это было сделано правильно, когда пользователь входит в систему с помощью команды configure() в конфигурации Spring Security.
Проще говоря, я хочу сказать: «Эй, теперь, когда пользователь вошел в систему, возьмите это имя пользователя и вставьте его в этот запрос. Возьмите результаты этого запроса и добавьте их в мой основной объект.поэтому я могу использовать его в любом месте приложения "
Вот моя очень простая конфигурация безопасности:
@Configuration
@EnableOAuth2Sso
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http)
throws Exception {
http.antMatcher("/**")
.authorizeRequests()
.anyRequest()
.authenticated();
}
}
Вот пример с моего контроллера по сбору информации о сборе информации о пользователях из моего основного объекта:
@RestController
@RequestMapping("user")
@Slf4j
public class UserController {
@GetMapping(value = "/authentication")
public Authentication getAuth(Principal principal){
OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) principal;
Authentication authentication = oAuth2Authentication.getUserAuthentication();
Map<String, String> details = new LinkedHashMap<>();
details = (Map<String, String>) authentication.getDetails();
return authentication;
}
}
Это прекрасно работает, поэтому у меня есть адрес электронной почты, имя, фамилия и т. Д., Которые моя компания предоставляет по их токену OAuth2.Мне просто нужно изменить этот основной объект, чтобы добавить разрешения ... прямо при входе пользователя в систему ...
Ожидаемые результаты:
У меня должен быть основной объект, который имеет всю пользовательскую информациюкак электронная почта, имя, фамилия, которые моя компания предоставляет от OAuth.Кроме того, у основного объекта должен быть список разрешений, которые мы собрали из пользовательского запроса к базе данных.