检索Java EE 5中已定义角色的列表

时间:2020-03-06 15:04:12  来源:igfitidea点击:

我想知道是否有可能在Java代码中检索web.xml文件中定义的安全角色的完整列表?如果是这样,该怎么做?

我知道'isUserInRole'方法,但我也想处理在web.xml文件中请求角色但未定义(或者定义不同)的角色。

解决方案

据我所知,没有办法在Servlet API中执行此操作。但是,我们可以直接解析web.xml并自己提取值。我在下面使用了dom4j,但是我们可以使用任何喜欢的XML处理工具:

protected List<String> getSecurityRoles() {
    List<String> roles = new ArrayList<String>();
    ServletContext sc = this.getServletContext();
    InputStream is = sc.getResourceAsStream("/WEB-INF/web.xml");

    try {
        SAXReader reader = new SAXReader();
        Document doc = reader.read(is);

        Element webApp = doc.getRootElement();

        // Type safety warning:  dom4j doesn't use generics
        List<Element> roleElements = webApp.elements("security-role");
        for (Element roleEl : roleElements) {
            roles.add(roleEl.element("role-name").getText());
        }
    } catch (DocumentException e) {
        e.printStackTrace();
    }

    return roles;
}