У меня следующая проблема: я хочу, чтобы меня перенаправили на исходный запрос URL-адреса после входа в систему на своей платформе. Прямо сейчас, если я не вошел в систему, меня перенаправляют на страницу входа, а после успешного входа в систему меня перенаправляют на страницу индекса, несмотря ни на что. Это то, что я пробовал до сих пор, я новичок в этой структуре и не знаю, как решить эту проблему. Заранее благодарим!
Application. java
public class Application extends Controller {
public static Result index() {
RDeadboltHandler handler = new RDeadboltHandler();
Subject user = handler.getSubject(Http.Context.current());
//check if the user is logged in, if not show the login screen.
if(user != null) {
return ok(index.render());
} else {
return ok(views.html.forms.loginForm.render(form(Login.class), ""));
}
}
AuthenticationController. java
public static Result login(String returnTo) {
return ok(views.html.forms.loginForm.render(form(Login.class), returnTo));
}
public static Result authenticate(String returnTo) throws GeneralSecurityException {
Form<Login> loginForm = form(Login.class).bindFromRequest();
if (loginForm.hasErrors()) {
return badRequest(views.html.forms.loginForm.render(loginForm, returnTo));
} else {
String id = loginForm.get().id;
String password = loginForm.get().password;
LDAPAuthenticator ldap = new LDAPAuthenticator();
String authenticatedUser = ldap.authenticate(id, password);
if(authenticatedUser == null) {
flash("error", "Invalid user or password");
return badRequest(views.html.forms.loginForm.render(loginForm, returnTo));
}
session(Constants.ID, loginForm.get().id);
session(Constants.NAME, authenticatedUser);
RDeadboltHandler handler = new RDeadboltHandler();
Subject user = handler.getSubject(Http.Context.current());
if(user != null) {
if (evaluateRoles(ldap)){
flash(Constants.FLASH_SUCCESS_KEY, "Logged in as: " + authenticatedUser);
} else {
flash(Constants.FLASH_ERROR_KEY, Messages.get("error.userNotRegistered"));
return badRequest(views.html.forms.loginForm.render(loginForm, returnTo));
}
} else {
// create user in database, if it does not exist already
String lastName = StringUtils.substringBefore(authenticatedUser, " ");
String firstName = StringUtils.substringAfterLast(authenticatedUser, " ");
User dbUser = User.create(loginForm.get().id, firstName, lastName);
user = handler.getSubject(Http.Context.current());
if (user != null && evaluateRoles(ldap)){
flash(Constants.FLASH_SUCCESS_KEY, "Logged in as: " + authenticatedUser);
} else {
flash(Constants.FLASH_ERROR_KEY, Messages.get("error.userNotRegistered"));
return badRequest(views.html.forms.loginForm.render(loginForm, returnTo));
}
}
flash(Constants.FLASH_LOGIN_KEY, "login");
if(returnTo.equals("")) {
return redirect(routes.Application.index());
}
return redirect(returnTo);
}
}
loginForm. scala. html
@(authForm: Form[AuthenticationController.Login], returnTo: String)
@import helper._
@import play.i18n.Messages
<html>
@views.html.head()
<body>
<div class="container">
@helper.form(routes.AuthenticationController.authenticate(returnTo), 'class -> "form-signin") {
...
}
без ссылки. scala. html файл:
@*main() {*@
<div class="hero-unit center">
<h1>Access Restricted <small><font face="Tahoma" color="red">Unauthorized 403</font></small></h1>
<a href="@routes.Application.index()" class="btn btn-large btn-info"><i class="icon-home icon-white"></i> Dashboard</a>
</div>
@*}*@