获取当前用户的所有角色

时间:2016-01-12 22:47:58

标签: jax-rs roles security-context

登录后,我怎样才能获得用户的所有角色?

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

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

1 个答案:

答案 0 :(得分: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 []数组中声明名称)