Получение имени пользователя из аутентификации в Spring Security для отображения во внешнем интерфейсе ⇐ JAVA
Получение имени пользователя из аутентификации в Spring Security для отображения во внешнем интерфейсе
Мне нужно, чтобы имя пользователя отображалось на главной странице после успешной аутентификации. У меня есть следующий класс конфигурации авторизации JWT, и затем я создал контроллер /getUsername, но он не возвращает проверенное имя пользователя.
@Configuration @EnableSpannerRepositories @EnableConfigurationProperties(JwtAuthorizationProperties.class) общественный класс JwtAuthorizationConfiguration { @Autowired частный ClientRegistrationRepository clientRegistrationRepository; @Value("${spring.security.oauth2.client.registration.azure.redirect-uri}") частная строка logoutRedirectUri; @Бин SecurityFilterChain customJwtSecurityChain (HttpSecurity http, реквизит JwtAuthorizationProperties) выдает исключение { http .authorizeHttpRequests(авторизовать -> разрешать .requestMatchers("/healthCheck", "/static/**", "/assets/**", "/webjars/**", "/login").permitAll().anyRequest().authenticated() ) .formLogin(formLogin -> формаВойти .loginPage("/логин") ) .oauth2Login(oauth2Login -> { oauth2Login.loginPage("/login") .userInfoEndpoint(ep -> ep.oidcUserService(customOidcUserService(реквизит))) .defaultSuccessUrl("/dashboard"); }); http.logout(выход -> logout.logoutSuccessHandler(oidcLogoutSuccessHandler())); http.logout().logoutRequestMatcher(новый AntPathRequestMatcher("/logout")); http.csrf().disable(); вернуть http.getOrBuild(); } частный LogoutSuccessHandler oidcLogoutSuccessHandler() { OidcClientInitiatedLogoutSuccessHandler oidcLogoutSuccessHandler = новый OidcClientInitiatedLogoutSuccessHandler(this.clientRegistrationRepository); oidcLogoutSuccessHandler.setPostLogoutRedirectUri(logoutRedirectUri.replaceAll("/login/oauth2/code/azure", "/login")); вернуть oidcLogoutSuccessHandler; } Private OAuth2UserService customOidcUserService (реквизит JwtAuthorizationProperties) { окончательный делегат OidcUserService = новый OidcUserService(); окончательный Mapper GroupsClaimMapper = новый GroupsClaimMapper( реквизит.getAuthoritiesPrefix(), реквизит.getGroupsClaim(), props.getGroupToAuthorities()); возврат (userRequest) -> { OidcUser oidcUser = делегат.loadUser(userRequest); // Дополняем стандартные полномочия группами SetmappedAuthorities = новый HashSet(); mappedAuthorities.addAll(oidcUser.getAuthorities()); mappedAuthorities.addAll(mapper.mapAuthorities(oidcUser)); oidcUser = новый NamedOidcUser(mappedAuthorities, oidcUser.getIdToken(), oidcUser.getUserInfo(),oidcUser.getName()); вернуть oidcUser; }; } Это контроллер, от которого я пытаюсь получить имя пользователя:
@RequestMapping(value = "/getUsername", метод = RequestMethod.GET) public String getUsername (модель модели, пользователь аутентификации) { UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); вернуть userDetails.getUsername(); } } Любая помощь будет очень признательна. Спасибо!
Мне нужно, чтобы имя пользователя отображалось на главной странице после успешной аутентификации. У меня есть следующий класс конфигурации авторизации JWT, и затем я создал контроллер /getUsername, но он не возвращает проверенное имя пользователя.
@Configuration @EnableSpannerRepositories @EnableConfigurationProperties(JwtAuthorizationProperties.class) общественный класс JwtAuthorizationConfiguration { @Autowired частный ClientRegistrationRepository clientRegistrationRepository; @Value("${spring.security.oauth2.client.registration.azure.redirect-uri}") частная строка logoutRedirectUri; @Бин SecurityFilterChain customJwtSecurityChain (HttpSecurity http, реквизит JwtAuthorizationProperties) выдает исключение { http .authorizeHttpRequests(авторизовать -> разрешать .requestMatchers("/healthCheck", "/static/**", "/assets/**", "/webjars/**", "/login").permitAll().anyRequest().authenticated() ) .formLogin(formLogin -> формаВойти .loginPage("/логин") ) .oauth2Login(oauth2Login -> { oauth2Login.loginPage("/login") .userInfoEndpoint(ep -> ep.oidcUserService(customOidcUserService(реквизит))) .defaultSuccessUrl("/dashboard"); }); http.logout(выход -> logout.logoutSuccessHandler(oidcLogoutSuccessHandler())); http.logout().logoutRequestMatcher(новый AntPathRequestMatcher("/logout")); http.csrf().disable(); вернуть http.getOrBuild(); } частный LogoutSuccessHandler oidcLogoutSuccessHandler() { OidcClientInitiatedLogoutSuccessHandler oidcLogoutSuccessHandler = новый OidcClientInitiatedLogoutSuccessHandler(this.clientRegistrationRepository); oidcLogoutSuccessHandler.setPostLogoutRedirectUri(logoutRedirectUri.replaceAll("/login/oauth2/code/azure", "/login")); вернуть oidcLogoutSuccessHandler; } Private OAuth2UserService customOidcUserService (реквизит JwtAuthorizationProperties) { окончательный делегат OidcUserService = новый OidcUserService(); окончательный Mapper GroupsClaimMapper = новый GroupsClaimMapper( реквизит.getAuthoritiesPrefix(), реквизит.getGroupsClaim(), props.getGroupToAuthorities()); возврат (userRequest) -> { OidcUser oidcUser = делегат.loadUser(userRequest); // Дополняем стандартные полномочия группами SetmappedAuthorities = новый HashSet(); mappedAuthorities.addAll(oidcUser.getAuthorities()); mappedAuthorities.addAll(mapper.mapAuthorities(oidcUser)); oidcUser = новый NamedOidcUser(mappedAuthorities, oidcUser.getIdToken(), oidcUser.getUserInfo(),oidcUser.getName()); вернуть oidcUser; }; } Это контроллер, от которого я пытаюсь получить имя пользователя:
@RequestMapping(value = "/getUsername", метод = RequestMethod.GET) public String getUsername (модель модели, пользователь аутентификации) { UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); вернуть userDetails.getUsername(); } } Любая помощь будет очень признательна. Спасибо!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Токен аутентификации FastAPI не отображается во внешнем интерфейсе [дубликат]
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-