Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JAXP(JEE6)解析简单的XML文档_Java_Xml_Parsing_Jakarta Ee - Fatal编程技术网

Java 使用JAXP(JEE6)解析简单的XML文档

Java 使用JAXP(JEE6)解析简单的XML文档,java,xml,parsing,jakarta-ee,Java,Xml,Parsing,Jakarta Ee,我想为我的web应用程序创建一个授权筛选器(以便能够限制对某些页面的访问) 我创建了一个简单的.xml文件,其中包含允许每个用户访问的页面: <access> <buyer> <page>buyoffer.xhtml</page> <page>faq.xhtml</page> <page>index.jsp</page> &l

我想为我的web应用程序创建一个授权筛选器(以便能够限制对某些页面的访问)

我创建了一个简单的.xml文件,其中包含允许每个用户访问的页面:

  <access>
    <buyer>
        <page>buyoffer.xhtml</page>
        <page>faq.xhtml</page>
        <page>index.jsp</page>
        <page>login.xhtml</page>
        <page>main.xhtml</page>
        <page>registrationSucceded.xhtml</page>     
    </buyer>
    <seller>
        <page>sellerpanel.xhtml</page>
        <page>faq.xhtml</page>
        <page>index.jsp</page>
        <page>login.xhtml</page>
        <page>main.xhtml</page>
        <page>registrationSucceded.xhtml</page>     
    </seller>
    <administrator>
        <page>sellerpanel.xhtml</page>
        <page>faq.xhtml</page>
        <page>index.jsp</page>
        <page>login.xhtml</page>
        <page>main.xhtml</page>
        <page>registrationSucceded.xhtml</page>     
    </administrator>
</access>
在doFilter方法内部的注释中解释了我需要做什么。有人能给我一个提示,告诉我应该如何遍历该文件以找到每个用户类型的页面名吗?我尝试从互联网上学习JAXP示例,但它们比我需要的更复杂

更新
xml存储在WEB-INF/classes中

使用
节点列表节点=document.getElementsByTagName(标记名)标记名应为买方或卖方等,视需要而定。反复浏览节点列表并读取数据。

请问您为什么要重新发明轮子?如果您使用的是JavaEE6,为什么不使用内置的安全机制呢?它与您所做的类似,但本质上是声明性的

请阅读

本质上,它可以归结为在
web.xml
中编写:

<security-constraint>
   <display-name>For users in buyer role</display-name>
   <web-resource-collection>
      <web-resource-name>Restricted Access - Buyers Only</web-resource-name>
      <url-pattern>buyoffer.xhtml</url-pattern>
      <url-pattern>faq.xhtml</url-pattern>
      <url-pattern>index.jsp</url-pattern>
      <url-pattern>login.xhtml</url-pattern>
      <url-pattern>main.xhtml</url-pattern>
      <url-pattern>registrationSucceded.xhtml</url-pattern> 
      <http-method>GET</http-method>
   </web-resource-collection>
   <auth-constraint>
      <role-name>Buyer</role-name>
   </auth-constraint>
   <user-data-constraint>
      <transport-guarantee>NONE</transport-guarantee>
   </user-data-constraint>
</security-constraint>

对于买方角色的用户
限制访问-仅限买家
buyoffer.xhtml
常见问题解答.xhtml
index.jsp
login.xhtml
main.xhtml
注册succedd.xhtml
得到
买主
没有一个

上面的示例是针对买方角色的。

而是使用JAXB。JAXP是一个非常冗长的旧API。JAXB依赖于Javabeans,因此是干净且相对容易的。首先创建一个Javabean,它使用
javax.XML.bind
注释将1:1映射到XML文件

@XmlRootElement
public class Access {

    @XmlElement
    private User buyer;

    @XmlElement
    private User seller;

    @XmlElement
    private User administrator;

    public User getBuyer() {
        return buyer;
    }

    public User getSeller() {
        return seller;
    }

    public User getAdministrator() {
        return administrator;
    }

    public static class User {

        @XmlElement(name="page")
        private List<String> pages;

        public List<String> getPages() {
            return pages;
        }

    }

}
请注意,不应为此使用
new File()
。另见

最后,您可以访问所有买家页面,如下所示:

List<String> buyerPages = access.getBuyer().getPages();
// ...
List buyerPages=access.getBuyer().getPages();
// ...

毋庸置疑,家庭成长安全并不总是最佳实践。Java EE 6附带容器管理的安全性。

在这里如何控制重定向?没错。我发现基于过滤器的身份验证只适合非常复杂的应用程序。例如,您希望能够在一段时间内向某些用户授予某些权限。你要在db中记住所有这些“授权”。在一般情况下,基于容器的安全性是足够和有效的。我希望使用容器管理的安全性,因为我知道这样更好,只是在我的场景中实现它有困难。我想在我学到更多之前,我会坚持这种方法。另外,我需要在web.xml文件中添加一些东西吗?没有。以上就是阅读XML所需要做的全部工作。JAXB已经与JavaEE6容器捆绑在一起(我知道您正在使用Glassfish)。在Tomcat上,您必须单独安装和配置它。我刚刚写完过滤器,我要尝试一下。谢谢你的帮助。
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("allowedpages.xml");
Access access = (Access) JAXBContext.newInstance(Access.class).createUnmarshaller().unmarshal(input);
List<String> buyerPages = access.getBuyer().getPages();
// ...