I don't believe you can change the method the call gets delegate back to, but you can just do a redirect to your logout route.
if (...)
return delegate.call(ctx);
else
return redirect(routes.Controller.logout()); //reverse-route to your logout() method
Alternatively, I think you could do something like this where you pass the Context to your logout method.
// -- Action.class
return Controller.doLogout(ctx);
// -- Controller.java
public static Result logout()
{
// defined in your routes file but it just calls doLogout
return doLogout(ctx());
}
public static Result doLogout(Context ctx)
{
// this method does your actual "logout" process
ctx.session().clear();
return ...;
}