java.security.AccessControlException:访问被拒绝(java.lang.RuntimePermission accessClassInPackage.sun.misc)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6173989/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.misc)
提问by MoienGK
So my hosting company changed their service to tomcat 7 with security manager, and from that time on I am getting this exception every time my application tries to connect to MySQL database with Hibernate. I don't know what to do, they ask me for my Tomcat permissions, but I have not defined anything special.
所以我的托管公司使用安全管理器将他们的服务更改为 tomcat 7,从那时起,每次我的应用程序尝试使用 Hibernate 连接到 MySQL 数据库时,我都会收到此异常。我不知道该怎么办,他们问我 Tomcat 权限,但我没有定义任何特殊的东西。
Can any one help me?
谁能帮我?
This is my stack trace:
这是我的堆栈跟踪:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
sun.reflect.GeneratedMethodAccessor134.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.catalina.security.SecurityUtil.run(SecurityUtil.java:269)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:301)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
root cause
javax.servlet.ServletException: java.lang.ExceptionInInitializerError
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)
org.apache.jasper.runtime.PageContextImpl.access00(PageContextImpl.java:71)
org.apache.jasper.runtime.PageContextImpl.run(PageContextImpl.java:778)
java.security.AccessController.doPrivileged(Native Method)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:776)
org.apache.jsp.news_jsp._jspService(news_jsp.java:285)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
sun.reflect.GeneratedMethodAccessor134.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.catalina.security.SecurityUtil.run(SecurityUtil.java:269)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:301)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
root cause
java.lang.ExceptionInInitializerError
ir.omicc.hibernate.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:16)
ir.omicc.hibernate.util.HibernateUtil.getSessionFactory(HibernateUtil.java:24)
ir.omicc.classes.Publisher.getNews(Publisher.java:126)
org.apache.jsp.news_jsp._jspService(news_jsp.java:221)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
sun.reflect.GeneratedMethodAccessor134.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.catalina.security.SecurityUtil.run(SecurityUtil.java:269)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:301)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
root cause
java.security.AccessControlException: access denied (java.util.PropertyPermission hibernate.enable_specj_proprietary_syntax read)
java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
java.security.AccessController.checkPermission(AccessController.java:546)
java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
java.lang.System.getProperty(System.java:650)
org.hibernate.cfg.Configuration.reset(Configuration.java:362)
org.hibernate.cfg.Configuration.<init>(Configuration.java:296)
org.hibernate.cfg.Configuration.<init>(Configuration.java:300)
ir.omicc.hibernate.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:12)
ir.omicc.hibernate.util.HibernateUtil.getSessionFactory(HibernateUtil.java:24)
ir.omicc.classes.Publisher.getNews(Publisher.java:126)
org.apache.jsp.news_jsp._jspService(news_jsp.java:221)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
sun.reflect.GeneratedMethodAccessor134.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.catalina.security.SecurityUtil.run(SecurityUtil.java:269)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:301)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
回答by EricParis16
There's a problem in your tomcat security configuration. Check if exists in ${catalina.home}/conf/catalina.policy the following lines :
你的 tomcat 安全配置有问题。检查 ${catalina.home}/conf/catalina.policy 中是否存在以下几行:
grant {
// Precompiled JSPs need access to this package.
permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
permission java.lang.RuntimePermission "accessClassInPackage.sun.misc.*";
};
and add in ${catalina.home}/conf/policy.d/03.catalina.policy
并添加 ${catalina.home}/conf/policy.d/03.catalina.policy
// The permissions granted to your jar (ir.omicc ??)
grant codeBase "file:/path/to/the/ir.omicc.utilBox/your.jar" {
permission java.security.AllPermission;
};
it's a workaround but it's not secure.
这是一种解决方法,但并不安全。
回答by JB Nizet
It seems that the class ir.omicc.utilBox.PasswordService
tries to use some class in the sun.misc
package. If this class is one of your classes, then you should reimplement it without accessing the sun.misc classes. If not, then ask the developer/company who implemented this class to fix it. Using sun.misc
classes is a very bad practice, which has always been discouraged.
似乎该类ir.omicc.utilBox.PasswordService
试图使用sun.misc
包中的某个类。如果这个类是您的类之一,那么您应该在不访问 sun.misc 类的情况下重新实现它。如果没有,则要求实现此类的开发人员/公司修复它。使用sun.misc
类是一种非常糟糕的做法,一直不鼓励这样做。
回答by user207421
I asssume the stack trace has been edited. You now need to grant your codebase the following permission:
我假设堆栈跟踪已被编辑。您现在需要授予您的代码库以下权限:
java.util.PropertyPermission "hibernate.enable_specj_proprietary_syntax", "read";
or more probably "hibernate.*", "read, write";
或者更可能是“休眠。*”、“读、写”;