一旦我有一个委托人登录,我怎样才能获得一个用户的所有角色?
我正在创建一个 Java EE 6 应用程序,并且正在编写一个 JAX-RS 服务来返回当前用户的所有角色,这些角色将由前端使用以正确呈现屏幕。
我知道有多个界面可以返回用户是否是某个角色的成员,但我想要的是一个允许我获取该特定用户的所有角色的界面。
一旦我有一个委托人登录,我怎样才能获得一个用户的所有角色?
我正在创建一个 Java EE 6 应用程序,并且正在编写一个 JAX-RS 服务来返回当前用户的所有角色,这些角色将由前端使用以正确呈现屏幕。
我知道有多个界面可以返回用户是否是某个角色的成员,但我想要的是一个允许我获取该特定用户的所有角色的界面。
鉴于所有角色名称在编译时都是已知的,您可以执行以下操作:
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[] 数组中声明名称)。