阻止访问Maven资源文件的Java安全策略

阻止访问Maven资源文件的Java安全策略,java,maven,security,Java,Maven,Security,我目前正在Eclipse中进行一个基于Maven的项目,我想使用Hibernate+JPA连接到一个数据库。我创建了一个persistence.xml文件,并将其放在/src/main/resources/META-INF目录中。当我运行应用程序时,它将抛出非常著名的异常没有名为EntityManager的持久性提供程序 mypersistence.xml的内容: <?xml version="1.0" encoding="UTF-8"?> <persistence versi

我目前正在Eclipse中进行一个基于Maven的项目,我想使用Hibernate+JPA连接到一个数据库。我创建了一个
persistence.xml
文件,并将其放在
/src/main/resources/META-INF
目录中。当我运行应用程序时,它将抛出非常著名的异常
没有名为
EntityManager的持久性提供程序

my
persistence.xml的内容:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
         xmlns="http://xmlns.jcp.org/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
         http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="NetworkMonDB">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>  
    <properties>

        <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
        <property name="hibernate.hbm2ddl.auto" value="validate" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
    </properties>
</persistence-unit>

org.hibernate.jpa.HibernatePersistenceProvider
假的

如何在应用程序中初始化此项:

public void initializeDatabase(){
    final HashMap<String, String> dbConfig = new HashMap<String, String>();

    dbConfig.put("javax.persistence.jdbc.url", this.properties.getProperty("database.uri"));
    dbConfig.put("javax.persistence.jdbc.user", this.properties.getProperty("database.usr"));
    dbConfig.put("javax.persistence.jdbc.password", this.properties.getProperty("database.psw"));
    final EntityManagerFactory factory = Persistence.createEntityManagerFactory("NetworkMonDB", dbConfig); //exception thrown at this point.
    this.entityManager = factory.createEntityManager();
}
public void initializeDatabase(){
final HashMap dbConfig=new HashMap();
dbConfig.put(“javax.persistence.jdbc.url”,this.properties.getProperty(“database.uri”);
dbConfig.put(“javax.persistence.jdbc.user”、this.properties.getProperty(“database.usr”);
dbConfig.put(“javax.persistence.jdbc.password”,this.properties.getProperty(“database.psw”);
final EntityManagerFactory=Persistence.createEntityManagerFactory(“NetworkMonDB”,dbConfig);//此时引发异常。
this.entityManager=factory.createEntityManager();
}
以下是我的Maven依赖项:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.4.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.2.4.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.3.2.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.5</version>
    </dependency>

org.hibernate
冬眠核心
5.2.4.最终版本
org.hibernate
休眠实体管理器
5.2.4.最终版本
org.hibernate
休眠验证器
5.3.2.最终版本
org.hibernate.javax.persistence
hibernate-jpa-2.1-api
1.0.0.1决赛
mysql
mysql连接器java
6.0.5

我进行了一些进一步的测试(参见前面关于识别问题的评论的编辑),似乎问题来自我当前使用的安全策略。虽然我有一个在jar文件中构建和打包应用程序时使用的安全策略文件,但我没有一个可以在EclipseIDE中工作的安全策略文件。一旦我找到配置安全策略的最佳方法,我会将其作为答案发布,除非其他人有答案。

上述问题是由处理安全策略和安全管理器引起的。由于此应用程序最终将从硬盘读取数据,并使用RMI,因此我需要使用安全管理器和安全策略。但是,在IDE中工作时,实际上不需要在安全策略文件中设置代码基值

我目前的解决方案是将此作为我的开发区域安全策略:

grant {
    permission java.security.AllPermission;
}
然后,部署应用程序时使用的安全策略如下所示:

grant codeBase "file:./MyApplication.jar" {
    permission java.security.AllPermission;
}

我知道最终我需要为部署提供更好、更具体的安全策略,为特定的文件位置和网络值授予特定的权限,但这应该让我一直坚持到那时。

上述问题是由安全策略和安全管理器的处理引起的。由于此应用程序最终将从硬盘读取数据,并使用RMI,因此我需要使用安全管理器和安全策略。但是,在IDE中工作时,实际上不需要在安全策略文件中设置代码基值

我目前的解决方案是将此作为我的开发区域安全策略:

grant {
    permission java.security.AllPermission;
}
然后,部署应用程序时使用的安全策略如下所示:

grant codeBase "file:./MyApplication.jar" {
    permission java.security.AllPermission;
}
我知道最终我需要为部署提供更好、更具体的安全策略,为特定的文件位置和网络值授予特定的权限,但这应该会让我一直坚持下去