2009-09-21 11 views
6

Tengo una aplicación GoogleAppEngine que se requiere para conectarse a otro servidor localhost, pero cuando estoy tratando de hacer esto desde el código del servidor, consigo:¿Existe una forma correcta de manipular los permisos de seguridad de GoogleAppEngine?

java.security.AccessControlException: access denied (java.net.SocketPermission localhost resolve)

Sé que puedo especificar mi subvención adicional de seguridad mediante el uso de argumentos de Java virtual Machine (especifico en aplicación web configuración de ejecución):

java -Djava.security.manager -Djava.security.policy=WEB-INF/java.policy

con java.policy co ntents:

grant { 
     permission java.net.SocketPermission "localhost:8081", "connect, resolve"; 
}; 

pero se anula el gerente de seguridad interna GoogleAppEngine que se encuentra en la clase privada en com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager, por lo que las propiedades requeridas para AppEngine sí están desactivadas de esa manera.

¿Hay alguna manera de hacer que la clase del administrador de seguridad interna de GoogleAppEngine use mi archivo de políticas en lugar de reemplazarlo manualmente con un archivo auxiliar (que permite cualquier cosa) en un contenedor?

+1

Encontré una solución de clase ficticia en http://dmitrygusev.blogspot.com/2009/08/turn-java-security-manager-off-in.html, pero todavía espero encontrar otra manera de anular solo una permiso –

+1

¿Cómo espera ejecutar el servidor local en App Engine? Si va a ejecutar el servidor en otro lugar, ¿se encontrará con otros problemas? (cortafuegos, restricciones de Google) – phsiao

+0

sí, pero localhost es solo uno de prueba/sustituto, he querido poder conectarme con otro servidor abierto (jabber, por ejemplo), pero sí, muy posiblemente esté restringido en GAE (Esperé, tengo una posibilidad permitida para anular estas configuraciones si realmente entiendo lo que estoy haciendo, pero ahora veo que está bien en localhost pero no está bien en GAE) ... –

Respuesta

2

No puede abrir sockets en App Engine. Debe usar el URLFetch API, ya sea a través de java.net o directamente. Sin embargo, ¿cómo esperas acceder a 'localhost' cuando tu aplicación se cargó en App Engine?

+0

URLFetch realmente se ajustará a mis necesidades, Creo, gracias. –

+0

... no, lo siento, el puerto de mi servidor no es 80/443, es un servidor openfire y uso una biblioteca java específica para usar una aplicación en él, y esta biblioteca, a su manera, usa 'SocketAddress' para conectarse. No usaré GAE. La pregunta es no tener respuesta, parece, simplemente 'No se permiten conexiones a no-80/443'. –

0

si necesita usar jabber (xmpp), puede usar el motor de aplicación XMPP API.

Cuestiones relacionadas