1

一旦我有一个委托人登录,我怎样才能获得一个用户的所有角色?

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

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

4

1 回答 1

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[] 数组中声明名称)。

于 2016-01-14T11:46:56.803 回答