使用 GAE 的 Hibernate 的访问被拒绝 WEB-INF/类

Posted

技术标签:

【中文标题】使用 GAE 的 Hibernate 的访问被拒绝 WEB-INF/类【英文标题】:Access denied WEB-INF/classes for Hibernate with GAE 【发布时间】:2014-07-14 10:52:55 【问题描述】:

我正在 Google App Engine 上运行一个网络应用程序,并且我正在尝试使用 JPA (Hibernate 4.2)。 这是我的persistence.xml

<?xml version="1.0" encoding="UTF-8"?>

http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

<persistence-unit name="ProductionPU" transaction-type="RESOURCE_LOCAL" >

    <properties>

        <!-- Connection -->

        <property name="hibernate.dialect" value="org.hibernate.dialect.mysqlDialect" />
        <property name="javax.persistence.jdbc.url" value="jdbc:google:rdbms://***:***/***" />
        <property name="javax.persistence.jdbc.driver" value="com.google.appengine.api.rdbms.AppEngineDriver"></property>

        <!-- Session Management -->

        <property name="hibernate.current_session_context_class" value="thread" />
    </properties>

</persistence-unit>

在全部部署之前一切正常,但是每当我在本地使用它时,它都会给我这个错误

javax.persistence.PersistenceException: Unable to configure EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:387)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:58)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
at it.injenia.test.Test_HibernateServlet.doGet(Test_HibernateServlet.java:43)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:490)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\Users\Riccardo\workspace\Test%20Hibernate\war\WEB-INF\classes" "read")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
at java.security.AccessController.checkPermission(AccessController.java:559)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:429)
at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
at java.io.File.isDirectory(File.java:838)
at java.io.File.toURL(File.java:686)
at org.hibernate.ejb.packaging.JarVisitorFactory.getJarURLFromURLEntry(JarVisitorFactory.java:87)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:353)
... 41 more

由于安全策略,它似乎遇到了一些错误,因为它为访问资源“WEB-INF/classes”提供了“拒绝访问”。

有人可以帮帮我吗?两天后我真的在尝试一切,但我什么也没找到。

谢谢。

【问题讨论】:

Hibernate 与 AppEngine 不兼容。见这里:code.google.com/p/googleappengine/wiki/WillItPlayInJava 这是在我完成之前提交的。我还需要你验证......这个错误来自本地部署......对吗?在您的问题中,您已经写了“一切正常”,直到它被部署。这意味着什么?什么时候可以正常工作?还是你只使用 JPA 接口? 它在部署时有效,但在本地运行时无效。 【参考方案1】:

我在使用 AngularJS、GAE 和休眠时遇到了同样的错误。问题是我的输出路径中有空格。一旦我将输出更改为路径名中没有空格的位置,问题就消失了。

【讨论】:

以上是关于使用 GAE 的 Hibernate 的访问被拒绝 WEB-INF/类的主要内容,如果未能解决你的问题,请参考以下文章

在 docker-compose 中使用 MySQL 初始化 Hibernate 时连接被拒绝

Tomcat/Hibernate 与 MySql 的连接失败,出现“通信链接失败”和“权限被拒绝”

Glassfish 4 JDBC 资源连接失败,Hibernate 4.3.5 和 JPA 2.1 连接分配由于数据库“null”而被拒绝

在休眠中配置时jdbc连接被拒绝

#1045 - 用户 'root'@'localhost' 的访问被拒绝(使用密码:YES)MAMP MySQL 访问被拒绝

403 - 禁止访问: 访问被拒绝。您无权使用所提供的凭据查看此目录或页面。 怎么解决 ?