0

Google 앱 엔진을 사용하고 있습니다. 내 웹 사이트에서 아약스 요청을 보낼 때. 다음 예외가 발생합니다 :왜 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) 

Google App Engine Plugin with JDK 1.6.6을 사용하고 있습니다.

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

private PMF(){} 

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

공용 클래스 PMF를 {코드에서 나는 다음과 같이 객체를 지속하고있다 : 지속성에 대해 나는 다음과 같은 클래스를 사용하고

내 사용자 클래스에 대한
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 

} 

그리고 간단한 자바 서블릿을 사용하고 있습니다.

모든 것이 잘 작동하지만 Google App Engine에 내 웹 앱을 업로드하면이 예외가 발생합니다. 아무도 왜 그런 일이 일어나는 지 알고 어떻게 해결할 수 있습니까? 미리 감사드립니다.

답변

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; 
    } 
} 

내 서블릿은 :

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

+0

이 예외의 원인이되는 클래스에서 사용중인 라이브러리 및/또는 주석을 나열 할 수 있습니까? –

+0

자세한 내용은 내 질문을 편집했습니다. 나는 그것이 충분할 것이기를 바란다. 감사합니다 – Piscean