Авторизация на основе входа в систему Spring Boot OauthJAVA

Программисты JAVA общаются здесь
Anonymous
Авторизация на основе входа в систему Spring Boot Oauth

Сообщение Anonymous »

Я создаю загрузочное приложение Spring с использованием oauth, прямо сейчас у меня работает вход в систему github, но я хочу иметь приложение на основе ролей, поэтому доступ к некоторым маршрутам может быть доступен только для role_admin, а к другим - для role_user , я пробовал кое-что, и мой код выглядит немного беспорядочным, поэтому я ценю любую помощь!
Сейчас в классе CustomOAuth2User в методе getAuthorities отображается Set roles = getUserRoles(); как пустое, поэтому по умолчанию для всех пользователей используется роль role_user, поэтому я могу получить доступ к маршрутам, которым нужна такая роль, но не к маршрутам администратора, даже если я создаю пользователя с помощью role_admin.
SecurityConfig< /p>
@Configuration
@EnableWebSecurity
public class SecurityConfig {

@Autowired
private CustomOAuth2UserService oauthUserService;

@Autowired
private UserRepository userRepository;

@Autowired
private UserService userService;

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(auth -> {
auth.requestMatchers(HttpMethod.GET, "/userinfo").hasRole("ADMIN");
auth.requestMatchers(HttpMethod.GET, "/").hasRole("USER");
auth.anyRequest().authenticated();
})
.oauth2Login(oauth2 -> oauth2
.userInfoEndpoint(userInfo -> userInfo.userService(oauthUserService)).successHandler(new AuthenticationSuccessHandler() {

@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {

CustomOAuth2User oauthUser = (CustomOAuth2User) authentication.getPrincipal();

String github_id = oauthUser.getAttributes().get("id").toString();

Optional userExistOp = userRepository.findByIdentifier(github_id);

if(!userExistOp.isPresent()) {
//all user are saves with role User
UserDTO userDTO = new UserDTO(oauthUser.getName(),"username", oauthUser.getAttributes().get("id").toString(), oauthUser.getAttributes().get("avatar_url").toString(), Role.ADMIN);

userService.create(userDTO);
}

response.sendRedirect("/");
}
})
)
.build();
}
}

CustomOAuth2UserService
@Service
public class CustomOAuth2UserService extends DefaultOAuth2UserService {

@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
OAuth2User user = super.loadUser(userRequest);
return new CustomOAuth2User(user);
}
}

CustomOauth2User
public class CustomOAuth2User implements OAuth2User {

private OAuth2User oauth2User;

public CustomOAuth2User(OAuth2User oauth2User) {
this.oauth2User = oauth2User;
}

@Override
public Map getAttributes() {
return oauth2User.getAttributes();
}

@Override
public Collection

Подробнее здесь: https://stackoverflow.com/questions/781 ... horization

Вернуться в «JAVA»