2010-05-11 56 views
10

He usado GWT 2.0 desde hace unos días. Por lo tanto, trato de codificar una aplicación básica con un formulario de inicio de sesión y una página accesible solo si estoy conectado.Integración GWT 2.0 con Spring Security 3.0

Normalmente, en mi aplicación web con jsf, uso Spring Security 3.0 para configurar y asegurar ese tipo de aplicación. Entonces, decidí intentar hacer lo mismo con mi aplicación GWT 2.0.

He configurado bien la parte del servidor de Spring Security. Entonces, desde mi página de inicio de sesión de GWT, puedo ingresar mi nombre de usuario/contraseña y se realiza la autenticación a través de Spring Security. Se ha realizado la redirección a la página segura y puedo obtener el usuario conectado a través de una llamada rpc al servicio de seguridad que usa el SecurityContext de Spring Security. Entonces, creo que esa parte está bien.

Pero tengo un gran problema para proteger las URL. De hecho, me gustaría asegurar la página para restringir el acceso a Roles específicos, como lo hago normalmente con Spring Security.

En mi aplicación GWT, utilizo el patrón MVP con el controlador de aplicación central. Entonces, tengo solo una página y para esa página voy a diferentes vistas cuando agrego #name_of_view al final de la URL. Por ejemplo, para acceder a mi página de inicio de sesión en modo de desarrollo, utilizo la siguiente URL en mi navegador:

http: // 127.0.0.1:8888/fr.myapp.Application/Application.html?gwt.codesvr= 127.0.0.1:9997#login

vez estoy conectado correctamente, voy a los próximos:

http: // 127.0.0.1:8888/fr.myapp.Application/Application.html? gwt.codesvr = 127.0.0.1: 9997 # pagesecured

Debido a eso, no sé cómo configurar la etiqueta http en Spring Security y cómo definir la URL para interceptar para afectar las funciones específicas para restringir acceso. Además, creo que habrá un problema para usar estas URL entre el modo de desarrollo y el modo de producción clásico. No ?

Entonces, ¿alguien tiene alguna idea para ayudarme a configurar y proteger mi aplicación utilizando estas URL? o usando otra técnica para asegurar la aplicación con el inicio de sesión de formulario?

Gracias de antemano por su ayuda.

Sylvain.

Respuesta

8

No se puede usar la seguridad de nivel de página en este escenario, ya que las vistas se cambian en el lado del cliente.

La única forma de implementar una seguridad basada en roles en dicha aplicación tipo es usar un method-level security en su código del lado del servidor. También puede restringir el acceso a su Application.html para usuarios no autenticados al crear una página de inicio de sesión no relacionada con GWT (por ejemplo, Login.html).

5

De acuerdo con @axtavt: en general, no puede usar la seguridad de nivel de página con GWT, ya que solo se trata de una sola página en lo que respecta a la seguridad de primavera.

que debe hacer lo siguiente -

  1. Secure URL RPC. Si es necesario, puede usar la seguridad de nivel de método como señaló axtavt. Para conectar RPC con Spring Security, anule el método onAfterRequestDeserialized(RPCRequest) en su Servlet RPC.El método RPCRequest tiene detalles sobre el método que se invoca y los parámetros reales que se están pasando a ese método. Esta información es suficiente para evitar que un usuario actualice los registros de otro usuario.

  2. En caso de una autenticación o error de autorización en su servicio RPC, generan errores correspondientes y enviarlos al cliente. En su cliente, cree un centralized error handler y muestre el mensaje apropiado al usuario.

  3. Y, por último, además de la primavera de seguridad, es posible que desee protegerse contra XSS y CSRF. Consulte Security for GWT Applications para obtener información adicional.

1

Puede usar la seguridad de nivel de página, ya que su módulo GWT se puede compartir en dos páginas usando el método descrito por rustyshelf aquí: Problem with multiple entry Points in the same module.

En resumen:

  1. Crear una página, por ejemplo, Login.html, que solo usará el inicio de sesión del token, permite que cualquier persona acceda a él y, por ejemplo, debe contener una etiqueta div con el inicio de sesión con ID.
  2. Uso application.html, con una etiqueta div con el ID de aplicación, que será para todo lo demás y asegurarse de que no va a permitir el uso de la entrada de fichas y denegar el acceso a cualquier usuario no autenticado.
  3. Haga que su módulo de GWT cargar la vista apropiada de acuerdo a la etiqueta div que está en la página.

Los divs en cada uno de los archivos HTML deben ser uso sólo para averiguar qué se va a visualizar (en onModuleLoad) página HTML, pero el div luego se sacará, como el resto de la aplicación no debería confía en la presencia del div.

También debe usar method security para asegurar sus RPC, ya que lo anterior simplemente asegurará la URL de la que funcionará la mayor parte de su aplicación.