Перенаправить на исходный URL-адрес после входа в систему - PullRequest
0 голосов
/ 14 июля 2020

У меня следующая проблема: я хочу, чтобы меня перенаправили на исходный запрос 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>
@*}*@
 
...