Автоматический вход после регистрации - PullRequest
1 голос
/ 19 апреля 2010

У меня есть веб-приложение с аутентификацией на основе форм. На странице входа я разместил ссылку на публичную регистрационную форму. Регистрация добавляет пользователя в базу данных, которая используется для аутентификации.

Теперь можно ли сделать автоматический вход в систему как новый пользователь после завершения регистрации, не возвращаясь на страницу входа?

UPDATE

Дополнительная информация по запросу:

Источник данных в $ CATALINA_BASE / conf / server.xml:

...
    <GlobalNamingResources>
...
        <Resource auth="Container" type="javax.sql.DataSource" name="jdbc/gporder"
                  driverClassName="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://localhost/gporder"
                  maxActive="100" maxIdle="30" maxWait="10000"
                  username="xxx" password="yyy"/>
...
    </GlobalNamingResources>
...

Ресурсные ссылки и область в $ MYWAR / META-INF / context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/gporder">
    <ResourceLink global="jdbc/gporder" name="jdbc/gporder"
            type="javax.sql.DataSource"/>
    <Realm className="org.apache.catalina.realm.DataSourceRealm" 
            dataSourceName="jdbc/gporder" debug="99" localDataSource="true"
            digest="MD5" roleNameCol="role" userCredCol="password_hash"
            userNameCol="username" userRoleTable="rolemap" userTable="users"/>
</Context>

Что еще? есть JSP с HTML-формой регистрации и сервлет, который обрабатывает POST при отправке формы. Они оба слишком длинные для вставки, но сервлет создает нового пользователя и сохраняет его в базе данных (через спящий режим).

После этого на начальной странице выполняется перенаправление, в результате чего tomcat вместо этого перенаправляет на страницу входа. Поэтому мой вопрос: есть ли способ использовать имя пользователя и пароль, введенные в регистрационной форме, для принудительного входа в систему и избежать дальнейших перенаправлений на странице входа в систему?

Я бы не хотел полагаться на внутренние классы Tomcat.

Ответы [ 4 ]

2 голосов
/ 29 августа 2010

Вот возможное решение: регистрация должна быть включена в процедуру входа в систему.

Ссылка на регистрационную форму включена в форму входа в систему, хотя обе формы могут также иметь одну и ту же страницу. Вот код для login.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Authentication</title>
    </head>
    <body>
        <h1>Authentication</h1>
        <p>Please enter your username and password below, then click on the
            'Login' button</p>
        <form action="j_security_check" method="POST">
            <dl>
                <dt><label for="j_username">Username: </label></dt>
                <dd><input type="text" id="j_username" name="j_username"></dd>
                <dt><label for="j_password">Password: </label></dt>
                <dd><input type="password" id="j_password" name="j_password"></dd>
                <dd><input type="submit" name="login" value="Login"></dd>
            </dl>
        </form>
        <p>If you don't own an account yet, and would like to register,
            <a href="register.jsp">please click here</a></p>
    </body>
</html>

Вот форма регистрации, register.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Registration</title>
    </head>
    <body>
        <h1>Registration</h1>
        <p>Please fill in the form below, then click on the 'Register'
            button</p>
        <form action="register" method="post">
            <dl>
                <dt><label for="username">Username: </label></dt>
                <dd><input type="text" id="username" name="username"></dd>
                <dt><label for="password">Password: </label></dt>
                <dd><input type="password" id="password" name="password"></dd>
                <dt><label for="password">Verification: </label></dt>
                <dd><input type="password" id="verification" name="verification"></dd>
                <dt><label for="firstname">First name: </label></dt>
                <dd><input type="text" id="firstname" name="firstname"></dd>
                <dt><label for="lastname">Last name: </label></dt>
                <dd><input type="text" id="lastname" name="lastname"></dd>
                <dt><label for="email">E-mail address: </label></dt>
                <dd><input type="text" id="email" name="email"></dd>
                <dd><input type="submit" name="register" value="Register"></dd>
            </dl>
        </form>
    </body>
</html>

После отправки поля регистрации публикуются в сервлете, который создает нового пользователя в базе данных, а затем перенаправляются в / j_security_check:

String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setFirstName(request.getParameter("firstname"));
user.setLastName(request.getParameter("lastname"));
user.setEmail(request.getParameter("email"));

// ... register the user, then if everything is OK, do:

String url = request.getContextPath() + "/j_security_check";
response.sendRedirect(url + "?j_username="
        + URLEncoder.encode(username, "UTF-8")
        + "&j_password="
        + URLEncoder.encode(password, "UTF-8"));
1 голос
/ 27 июля 2010

У меня есть две идеи. Либо создайте новый HttpSession и попробуйте ввести пользователя в сеанс. Или передайте имя пользователя и пароль на страницу входа с переменными HTTP и используйте javascript для автоматической отправки формы.

1 голос
/ 19 апреля 2010

Как сказано; чтобы дать вам разумное предложение, вы не даете много информации.

Я бы сделал это так:

  • Ввод информации в базу данных (регистрация)
  • Выполните те же действия, которые происходят после того, как пользователь нажал «логин»
  • Перенаправить на ту же страницу, что и после входа пользователя в систему
0 голосов
/ 26 июня 2018

Этот вопрос похож на этот вопрос .

Простой ответ - позвонить request.login(username, password);, чтобы войти в систему, а затем перенаправить его на нужную страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...