0

我正在使用谷歌应用程序引擎。当我从我的网站发送ajax请求。我得到以下例外:为什么我得到java.security.AccessControlException?

Uncaught exception from servlet 
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessDeclaredMembers) 
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:355) 
at java.security.AccessController.checkPermission(AccessController.java:567) 
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
at com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:56) 
at java.lang.SecurityManager.checkMemberAccess(SecurityManager.java:1679) 
at java.lang.Class.checkMemberAccess(Class.java:2174) 
at java.lang.Class.getDeclaredMethods(Class.java:1807) 
at javax.servlet.http.HttpServlet.getAllDeclaredMethods(HttpServlet.java:426) 
at javax.servlet.http.HttpServlet.doOptions(HttpServlet.java:477) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
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.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:102) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35) 
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 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.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:249) 
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 com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:135) 
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:477) 
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:449) 
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:455) 
at com.google.tracing.TraceContext.runInContext(TraceContext.java:695) 
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:333) 
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:325) 
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:453) 
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) 
at java.lang.Thread.run(Thread.java:679) 

我使用eclipse与谷歌应用程序引擎插件与JDK 1.6.6。对于持久性我使用下面的类: 公共类PMF {

private static final PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional"); 

private PMF(){} 

public static PersistenceManagerFactory get(){ 
    return pmfInstance; 
} 
} 

,并在代码中,我很坚持的对象像以下:

user.setEmail(userEmail); 
user.setAddress(address); 
user.setFirstName(fName); 
user.setLastName(lName); 
user.setPassword(pwd); 
pm.makePersistent(user);  

代码为我的用户类以下内容:

@PersistenceCapable 
public class User{ 

@PrimaryKey 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
private String userEmail; 

@Persistent 
private String fName; 

    @Persistent 
private String lName; 

    @Persistent 
private String address; 

    @Persistent 
private String pwd; 

    public User(){} 

    // getters and setters for all 

} 

而我正在使用简单的java Servlets。

本地一切工作正常,但当我上传我的web应用程序谷歌appengine然后这个例外来。有谁知道为什么会发生,我该如何解决?提前致谢。

回答

0

由于App Engine的沙盒环境,您遇到了问题。这在其他similar postsRuntime documentation中进行了讨论。

类似这样的错误通常只在生产中体现出来,因为当地环境与生产环境相似但不完全相同。

编辑

虽这么说,下面的代码工作得很好,本地和生产。它基于您分享的代码,所以我不完全确定错误是什么。

我的用户等级:

import javax.jdo.annotations.IdGeneratorStrategy; 
import javax.jdo.annotations.PersistenceCapable; 
import javax.jdo.annotations.Persistent; 
import javax.jdo.annotations.PrimaryKey; 

@PersistenceCapable 
public class User{ 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private String userEmail; 

    @Persistent 
    private String fName; 

    @Persistent 
    private String lName; 

    @Persistent 
    private String address; 

    @Persistent 
    private String pwd; 

    public User(){} 

    public String getUserEmail() { 
    return userEmail; 
    } 

    public void setUserEmail(String userEmail) { 
    this.userEmail = userEmail; 
    } 

    public String getfName() { 
    return fName; 
    } 

    public void setfName(String fName) { 
    this.fName = fName; 
    } 

    public String getlName() { 
    return lName; 
    } 

    public void setlName(String lName) { 
    this.lName = lName; 
    } 

    public String getAddress() { 
    return address; 
    } 

    public void setAddress(String address) { 
    this.address = address; 
    } 

    public String getPwd() { 
    return pwd; 
    } 

    public void setPwd(String pwd) { 
    this.pwd = pwd; 
    } 
} 

我的servlet:

public class MyTestServlet extends HttpServlet { 
    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws IOException { 
    resp.setContentType("text/plain"); 
    resp.getWriter().println("Hello, world"); 

    User user = new User(); 
    user.setUserEmail("email"); 
    user.setAddress("address"); 
    user.setfName("first"); 
    user.setlName("last"); 
    user.setPwd("password"); 
    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    pm.makePersistent(user); 
    } 
} 

我能想到的唯一的事情是,你可能使用不正确的注释。你能确认你的注释符合我的标准吗?

+0

我在写这个问题之前看过那些帖子。但我无法解决它。任何解决方案 – Piscean 2012-07-21 16:31:36

+0

你能列出你在引起这个异常的类中使用的库和/或注释吗? – 2012-07-21 17:37:07

+0

我编辑了我的问题与更多细节。我希望它会够的。谢谢 – Piscean 2012-07-23 09:26:10