有什么方法可以在Servlet 3+环境中检索用户角色?

时间:2017-04-13 17:37:31

标签: java authentication java-ee wildfly

基于SO and the web上的其他帖子,似乎Servlet 3+容器中没有内置机制来从登录用户检索角色,而只是检查用户是否是角色:request.isUserInRole(String)

但有没有办法检索为应用程序定义的安全角色列表?

我觉得很奇怪,LoginModule必须保留主体的凭据,但没有任何定义/与主体角色相关的内容。在某些时候,当您致电isInRole()时,容器必须能够检查用户分配的角色列表。这些信息是否未在任何地方公开?

我似乎无法找到任何允许我从部署描述符(或通过注释)检索已定义角色的机制。我瞄准Wildfly 10 / Undertow,但最理想的是寻找与容器无关的解决方案。

这甚至可行吗?有没有简单的方法以编程方式检索我的应用程序中定义的security-role(在我的描述符中定义或通过@DeclareRoles注释)?

1 个答案:

答案 0 :(得分:0)

对于检索@rolesAllowed注释,我使用了内省。 您也可以通过注释检索已定义的角色。 示例中的引用this是Servlet。

ServletSecurity ss = this.getClass().getAnnotation(ServletSecurity.class);
for (String role : ss.value().rolesAllowed() ) {
        out.print(role + " ");
}

servlet中的注释是:

@WebServlet(name = "Coquito", urlPatterns = {"/Coquito"})
@ServletSecurity (@HttpConstraint( rolesAllowed= {"nuevo_menu_intranet"}))
public class Coquito extends HttpServlet {
}