java - 如何返回用户拥有的角色列表?

标签 java spring spring-boot azure azure-active-directory

我关注了这篇文章,https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-active-directory并创建了一个应用程序角色

以下端点使用用户角色进行授权

@CrossOrigin(origins = "http://localhost:8080")
@RestController
@RequestMapping("/api")
public class TutorialController {

    @Autowired
    TutorialRepository tutorialRepository;

     @PreAuthorize("hasAnyAuthority('APPROLE_Admin', 'APPROLE_Contributor')")
    @GetMapping("/tutorials")
    public ResponseEntity<List<Tutorial>> getAllTutorials(@RequestParam(required = false) String title) {
        try {
            List<Tutorial> tutorials = new ArrayList<Tutorial>();

我想引入一个额外的获取端点来返回用户拥有的角色列表?

更新:2022年5月25日

我添加了一个额外的映射,如下所述

@GetMapping("/roles")
public ResponseEntity<List<GrantedAuthority>> getRoles() {
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    UserDetails userDetails = (UserDetails) authentication.getPrincipal();
    List<GrantedAuthority> authorities = (List<GrantedAuthority>) userDetails.getAuthorities();
    return (ResponseEntity<List<GrantedAuthority>>) authorities;
}

收到错误:

java.lang.ClassCastException: class org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser cannot be cast to class org.springframework.security.core.userdetails.UserDetails

最佳答案

如果您已正确设置安全配置,您可以获取当前用户的角色,如下所示。

SecurityContextHolder.getContext().getAuthentication();
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
List<GrantedAuthority> authorities = userDetails.getAuthorities();

关于java - 如何返回用户拥有的角色列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72364748/

相关文章:

java - Google 云存储 java - 如何在以编程方式上传时授予对文件的访问权限

java - Java 中的优先级队列(最小堆)排序

java - 通过代理使用 mySql 重新连接后抛出由 : java. sql.SQLException : Callable statements not supported. 引起的

java - 具有自定义父项的 Spring Boot - 工作示例

spring-boot - Spring Boot 2 Actuator Starter 中的空指针 w。 Tomcat 指标

java - JdbcTemplate.queryforList() 返回值但 map.get 返回 null

java - 整数对象未在比较器的比较函数中进行比较

java - hibernate 映射 - 无法在类中找到属性名称的 setter

java - Hibernate 中的 ManyToOne 关系错误

java - 为什么这个 @ComponentScan 在我的 spring boot 应用程序中不起作用?