基于SO and the web上的其他帖子,似乎Servlet 3+容器中没有内置机制来从登录用户检索角色,而只是检查用户是否是角色:request.isUserInRole(String)
但有没有办法检索为应用程序定义的安全角色列表?
我觉得很奇怪,LoginModule必须保留主体的凭据,但没有任何定义/与主体角色相关的内容。在某些时候,当您致电isInRole()
时,容器必须能够检查用户分配的角色列表。这些信息是否未在任何地方公开?
我似乎无法找到任何允许我从部署描述符(或通过注释)检索已定义角色的机制。我瞄准Wildfly 10 / Undertow,但最理想的是寻找与容器无关的解决方案。
这甚至可行吗?有没有简单的方法以编程方式检索我的应用程序中定义的security-role
(在我的描述符中定义或通过@DeclareRoles注释)?
答案 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 {
}