java中的google应用程序引擎崩溃,出现“accesscontrolexception:access denied…”异常

efzxgjgh  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(478)

基本上是通过eclipsejavaweb项目连接到我的云sql数据库
检查表
1) 将我的google app engine sdk更新至最新的1.9.34版本
2) 将我的jdbc com.mysql.jdbc.driver更新到最新的5.1.38版本
3) 将jdbc驱动程序添加到构建路径
我根本无法连接到google cloud sql,因此出现以下错误:

java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
    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 com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:454)
    at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315)
    at java.lang.Thread.init(Thread.java:391)
    at java.lang.Thread.init(Thread.java:349)
    at java.lang.Thread.<init>(Thread.java:445)
    at java.util.TimerThread.<init>(Timer.java:499)
    at java.util.Timer.<init>(Timer.java:101)
    at java.util.Timer.<init>(Timer.java:146)
    at com.mysql.jdbc.ConnectionImpl.<clinit>(ConnectionImpl.java:208)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:191)
    at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70)
    at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:65)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:283)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:233)
    at com.dinuka.myapp.servlets.PlanServlet.doPost(PlanServlet.java:59)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

搜索了一整天,逐字逐句地浏览了stackoverflow上的所有相关问题。我要把头发拔出来了:d
下面是我连接数据库的简单代码。不敢相信我做错了什么:

public class MyServlet extends HttpServlet {

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        String url = null;
        try {
            if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
                // Load the class that provides the new "jdbc:google:mysql://" prefix.
                Class.forName("com.mysql.jdbc.GoogleDriver");
                url = "jdbc:google:mysql://app_id:instance_id/data?user=root";
            } else {
                // Local MySQL instance to use during development.
                Class.forName("com.mysql.jdbc.Driver");
                url = "jdbc:mysql://instance-ip:3306/data?user=root";
            }
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }

        PrintWriter out = resp.getWriter();
        try {
            Connection conn = DriverManager.getConnection(url);
            System.out.println("Connection established");
            out.println("Connection established");
            try {
            } finally {
                conn.close();
            }
        } catch (SQLException e) {
            out.append(e.getMessage());
            e.printStackTrace();
        }
    }

}

请修复这个错误,谷歌团队!同时,有人能帮我渡过难关吗?

nzk0hqpo

nzk0hqpo1#

终于!修好了!任何一个面对这个问题的人。下面是你如何修复它的!
第一步:保持你的道德和保持积极(相信我,我知道)
第二步:将你的google应用引擎sdk更新到最新版本。从这个链接查看最新的sdk=>https://cloud.google.com/appengine/downloads
步骤3:将jdbc驱动程序更新到最新版本。检查此链接的最新版本=>https://dev.mysql.com/downloads/connector/j/
步骤4:下面是如何正确地将JDBCJAR添加到项目中:复制并粘贴到lib文件夹(war/webinf/lib)。右键单击eclipse项目,然后单击buildpath->configurebuildpath。单击“addjars”,转到lib文件夹,选择刚才复制的mysql连接器java文件。单击应用并确定。
步骤5:清理并构建项目
第六步:我不知道这是否必要,但我们还是这样做吧。右键单击项目并转到属性。
第7步:展开“google”部分并选择appengine。确保googlecloudsql已启用(选中),并选择usecloudsqlinstance单选按钮。
第8步:在单选按钮的右边,您将看到一个名为“configure”的链接。单击它并用示例名、数据库名等填充字段,然后单击ok。
步骤9:在我们前面看到的单选按钮下面,您应该看到另一个名为configure的链接,旁边是一个名为“appenginesqlinstance”的标签。单击configure并用示例名称、db名称等填充字段,就像我们以前做的那样。单击“确定”并关闭“属性”窗口。
最后一步:清理并再次构建项目并运行它。如果您正确地遵循了所有步骤,那么您应该连接到强大的google云。
我花了太多的时间来解决这个问题,我知道我可以用这个答案简化别人的一天。祝你好运!
-dinuka jayasuriya,未来的谷歌人;)

相关问题