En mi juego! aplicación, he codificado como el controllers.Securityla página de inicio de sesión después de playframework
class Security extends controllers.Secure.Security {
...
static void onDisconnected() {
Application.index();
}
static void onAuthenticated() {
User user = User.find("byEmail",Security.connected()).first();
if(user.isAdmin()) {
Admin.index();
}else {
System.out.println("onAuthenticated()::user not admin");
}
}
he puesto las rutas como
GET /admin/? Admin.index
* /admin module:crud
GET / Application.index
Cuando estoy en una página pageX decir y hacer clic en el enlace de conexión, aparecerá la ventana de acceso y Puedo iniciar sesión. Si inicio sesión como administrador, me lleva al Admin.index() y, por lo tanto, a la vista Admin/index.html. Tan bueno
Pero cuando estoy en la página X, hago clic en el enlace de inicio de sesión, espero volver a pageX.Instead, la Application.index() método se llama y me llevan a la Application.index.ht ml .. ¿Es este el comportamiento esperado? ¿Qué debo hacer para acceder a pageX después de iniciar sesión?
actualización:
He intentado almacenar la dirección URL en flash utilizando el controlador de seguridad en @Before
class Security extends controllers.Secure.Security {
@Before
static void storeCurrentUrl() {
System.out.println("storeCurrentUrl()");
flash.put("url", "GET".equals(request.method) ? request.url : "/");
}
static boolean authenticate(String username, String password) {
...
}
static void onAuthenticated() {
...
String url = flash.get("url");
System.out.println("url="+url);
if(!user.isAdmin()) {
if(url!=null) {
System.out.println("url not null");
redirect(url);
}else {
System.out.println("url null ..go to /");
redirect("/");
}
}
}
Cuando me conecto, consigo éstos salida del terminal
url=null
url null ..go to/
index()
he puesto los enlaces de inicio de sesión/cierre de sesión en la plantilla main.html que es heredado por todas las demás páginas
<div id="main">
<div class="auth">
<a href="@{Admin.index()}">Go to Admin Area</a><br/><br/>
<a href="@{Secure.login()}">Login</a><br/><br/>
<a href="@{Secure.logout()}">Log out</a>
</div>
gracias por la reply..however cuando he intentado esto, yo estoy recibiendo el URL como null.It parece que no es @Before executed.I han actualizado el question..Will que eche un vistazo? –
Para llamar al método @Before, debe ser parte del mismo controlador donde se define la acción entrante. Aquí storeCurrentUrl() no está en un controlador donde se define la acción de inicio de sesión().Por lo tanto, storeCurrentUrl() nunca será llamado. – sojin
Su caso va a ser un poco complicado, como Play es sin estado, nunca almacena la url en su página actual (página X) a la que se hará referencia en la próxima solicitud. Una de las maneras podría ser (aunque creo que está un poco fuera de lugar) mantener la URL de la página actual en flash cada vez que se entregue esa página, de modo que estará allí en flash para una redirección en la próxima solicitud (en autenticación fallida). – sojin