Pregunta

Estoy buscando un método o corriente API que permite añadir fichas a la aplicación web de las solicitudes.Tal vez dentro de la sesión, pero no se conservan.O si ustedes me pueden ayudar por esbozar un método eficiente para hacer esto

E. g.

1. Solicitud GET => Servlet genera un token y lo imprime en la vista

2. devuelve una vista con un oculto token

<input type="hidden" name="token" value="UA37jdjs9UDJS3">
<input type="submit" name="deleteEmail" value="Delete">

3. Solicitud POST => formulario es enviado, y comprueba si el token es el mismo.

Algunas cosas a tener en cuenta, Si hay peticiones Ajax, a continuación, algunos otros tokens tendría que estar vivo para un número de solicitudes.

Si el usuario decide cerrar el navegador, el token tendría que morir cuando la sesión está agotado.

Si el usuario no completa el formulario, se va a hacer algo más en el sitio, los tokens tendría que ser eliminado ya que no van a ser utilizadas.

Pero ¿cuál es la mejor manera de implementar un sistema como este,

¿Spring Security 3 tiene un sistema que pueda utilizar?

dentro de Java,Grails,Spring MVC, Spring Security 3 y de Hibernación de la zona

¿Fue útil?

Solución

Hizo usted echa un vistazo a "Sincronizador de Token de Patrón" en la documentación en Grails http://grails.org/doc/1.2.0/guide/single.html ?

Otros consejos

Eche un vistazo a la HDIV proyecto en http://www.hdiv.org/.Hacen exactamente esto.Incluso si usted no utiliza el HDIV del proyecto de código, a continuación, la información no puede dar una opción de cómo hacerlo usted mismo.Fue una buena imprimación para mí para aprender sobre el manejo de las fichas para cosas como CSRF y otros usos, como la doble someterse a los controles.

Primero que pensé fue que usted podría usar los ya generados identificador de sesión.Pero si usted está tratando de horquilla estado sugeriría usar algo como las costuras de los modelos de conversación

¿Por qué no simplemente utiliza el session_id que el contenedor Web genera para usted cuando usted llame solicitud.getSession()?

Si desea crear su propio "token" es posible que desee comprobar las Cookies.Una Cookie es un par clave-valor enviado como un encabezado HTTP de un servidor web a un navegador web y sin cambios a ser enviado por el navegador cada vez que accede a ese servidor.

Para crear una cookie en un Servlet puede utiliza:

public void doGet ( HttpServletRequest request, HttpServletResponse response )
     throws ServletException, IOException {
  // Create a cookie
  Cookie c1 = new Cookie("yourdomain.token","the value");
  response.addCookie(c1);
 //build your response

}

La cookie se incluirán automáticamente en la siguiente petición http.Usted puede leer de nuevo con:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
//build your response
}

Hace poco me encontré con un caso de uso para esto.

Si una vieja ventana de la aplicación estuvo presente en el navegador, y un enlace de inicio de sesión se hizo desde otra ventana del navegador, la acción login primero se crea una nueva sesión y, a continuación, se redirige a la ventana de la aplicación.Esto dio lugar a la edad de la ventana de onunload método de método, lo que resultó en una petición de desconexión al servidor de registro del nuevo usuario.

Depender de javascript evento onunload para salir de la sesión parece que tipo de mierda a mí, pero esto no podía ser cambiado, por lo que decidimos hacer como el OP sugerido y se añade un token en cada vista procesado, la comprobación de que para cada solicitud.Esto detiene el onunload petición de desconexión de la terminación de la nueva sesión.

En cuanto a la mejor manera, yo diría que este es bastante sencillo.Por ejemplo, puede utilizar http://java.sun.com/j2se/1.5.0/docs/api/java/util/UUID.html para generar las claves únicas.Si usted está utilizando un componente basado en un marco como el Tapiz, JSF o Peatonal podría ser un más alto nivel de la forma de manejar esto.

Es esto similar a tu caso de uso?O estás tratando de lograr algo completamente diferente?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top