【问题标题】:Get all roles for the current user获取当前用户的所有角色
【发布时间】:2016-04-17 18:01:51
【问题描述】:

当我的委托人登录后,如何获取用户的所有角色?

我正在创建一个 Java EE 6 应用程序,并且我正在编写一个 JAX-RS 服务来返回当前用户的所有角色,这些角色将由前端使用以正确呈现屏幕。

我知道有多个界面可以返回用户是否是某个角色的成员,但我想要的是 一个允许我获取该特定用户的所有角色的界面 .

【问题讨论】:

  • 有什么问题?请论证它。
  • @satoshi,我想我现在可能让自己更清楚了。
  • 可能重复:stackoverflow.com/questions/344117/… 角色是如何定义的?你在使用 JAAS 吗?您使用的是哪个应用服务器?
  • @DuranWesleyHarris 我正在使用 JAAS。我正在使用 WebSphere 8.5.5。

标签: jax-rs roles security-context


【解决方案1】:

鉴于所有角色名称在编译时都是已知的,您可以执行以下操作:

public final class SecurityRoles {

    static final String USER_ROLE = "user";
    static final String ADMIN_ROLE = "admin";
    static final String SUPPORT_ROLE = "support";

}

@DeclareRoles({
        USER_ROLE,
        ADMIN_ROLE,
        SUPPORT_ROLE
})
@Path("/rest")
public class SomeRS {

    @Context
    SecurityContext securityContext;

    @GET 
    @PermitAll
    @Produces(MediaType.APPLICATION_JSON)
    public List<String> lookupUserRoles() {
        return Arrays.stream(SomeRS.class.getAnnotation(DeclareRoles.class).value())
                .filter(roleName -> securityContext.isUserInRole(roleName))
                .collect(Collectors.toList());
    }

}

在将角色名称添加到返回的列表之前测试用户是否属于每个已知角色。

请注意,如果您不使用@DeclareRoles,则应用程序使用的角色必须在 web.xml 或 application.xml 文件中声明(并且您需要在某处的 String[] 数组中声明名称) .

【讨论】:

  • ...这意味着没有 API 可以直接检查所有角色,唯一的出路就是单独测试每个角色,对吗?
  • 据我所知,没有标准的API可以直接列出所有角色
猜你喜欢
  • 2014-03-09
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2021-10-11
  • 2021-10-06
相关资源
最近更新 更多