packagecom.onlyoffice.integration.config;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.security.config.annotation.web.builders.HttpSecurity;importorg.springframework.security.config.annotation.web.configuration.EnableWebSecurity;importorg.springframework.security.core.GrantedAuthority;importorg.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest;importorg.springframework.security.oauth2.client.oidc.userinfo.OidcUserService;importorg.springframework.security.oauth2.client.registration.ClientRegistration;importorg.springframework.security.oauth2.client.userinfo.OAuth2UserService;importorg.springframework.security.oauth2.core.OAuth2AccessToken;importorg.springframework.security.oauth2.core.oidc.user.DefaultOidcUser;importorg.springframework.security.oauth2.core.oidc.user.OidcUser;importorg.springframework.security.web.SecurityFilterChain;importorg.springframework.util.StringUtils;importjava.util.HashSet;importjava.util.Set;@Configuration@EnableWebSecuritypublicclassSecurityConfig{@BeanpublicSecurityFilterChainfilterChain(finalHttpSecurityhttp)throwsException{http.csrf().disable().authorizeRequests().antMatchers("/track","/download").permitAll().anyRequest().authenticated().and().oauth2Login(oauth2->oauth2.userInfoEndpoint(userInfo->userInfo.oidcUserService(this.oidcUserService())));returnhttp.build();}privateOAuth2UserService<OidcUserRequest,OidcUser>oidcUserService(){finalOidcUserServicedelegate=newOidcUserService();return(userRequest)->{// Delegate to the default implementation for loading a userOidcUseroidcUser=delegate.loadUser(userRequest);OAuth2AccessTokenaccessToken=userRequest.getAccessToken();Set<GrantedAuthority>mappedAuthorities=newHashSet<>();// TODO// 1) Fetch the authority information from the protected resource using accessToken// 2) Map the authority information to one or more GrantedAuthority's and add it to mappedAuthorities// 3) Create a copy of oidcUser but use the mappedAuthorities insteadClientRegistration.ProviderDetailsproviderDetails=userRequest.getClientRegistration().getProviderDetails();StringuserNameAttributeName=providerDetails.getUserInfoEndpoint().getUserNameAttributeName();if(StringUtils.hasText(userNameAttributeName)){oidcUser=newDefaultOidcUser(mappedAuthorities,oidcUser.getIdToken(),oidcUser.getUserInfo(),userNameAttributeName);}else{oidcUser=newDefaultOidcUser(mappedAuthorities,oidcUser.getIdToken(),oidcUser.getUserInfo());}returnoidcUser;};}}