Solicitud de intercepción y verificación de autorización en playframework
Estoy usandoplay framework 2.4.2
con Java y quiero validar que un usuario haya iniciado sesión interceptando todas las solicitudes y verificando si se establece un valor de sesión. Entonces he extendido elDefaultHttpRequestHandler y anulado elcreateAction
Método para interceptar todas las solicitudes. Sin embargo, no he encontrado una buena manera de validar la sesión.
Cuando intento obtener el valor de la sesión, obtengo una excepción de tiempo de ejecución:There is no HTTP Context available from here
A continuación se muestra la clase con la que estoy trabajando:
public class RequestHandler extends DefaultHttpRequestHandler {
@Override
public Action createAction(Http.Request request, Method method) {
session("loggedIn"); // Throws runtime Exception: no HTTP Context
}
}
Opción 2 - FeoComo la sesión es técnicamente una cookie, puedo recuperar el valor del encabezado con un código como el siguiente:
for(String cookie : request.headers().get("Cookie")){
System.out.println("cookie: "+cookie);
}
Pero luego tengo que analizar la cadena de cookies que se parece a la siguiente línea para obtener el valor logIn. Muy sucio para mi gusto.
_ga=GA1.1.1508004144.1421266376; ki_r=; ki_t=1438789543788%378129908%3B1438789543788%3B1%3B1; PLAY_SESSION=0570411c3eb55ad230681539ddcfaa4220583fd-loggedIn=1
Opción 3: demasiado fácil para olvidar la anotaciónNoto que algunos sitios web documentan un enfoque diferente y en su lugar crean un
composición de acción y agregue la anotación adecuada a cada clase o método de controlador.
El problema con este enfoque es que requiere que el desarrollador recuerde agregar la anotación. Preferiría revertir esto para bloquear cada ruta por defecto y luego agregar una anotación a las rutas que no necesitan la validación.
Un par de sitios que documentan la composición de acciones:
http://alexgaribay.com/2014/06/16/authentication-in-play-framework-using-java/https://www.playframework.com/documentation/2.2.1/JavaGuide4Pregunta¿Hay alguna forma de validar globalmente si un usuario debe tener acceso a una página y cómo puedo acceder a la variable de sesión?
* Tenga en cuenta que no estoy interesado en utilizar un complemento de terceros para la autenticación.