Java 注册后自动登录

Java 注册后自动登录,java,authentication,tomcat,registration,Java,Authentication,Tomcat,Registration,我有一个基于表单身份验证的Web应用程序。在登录页面上,我放置了一个指向公共注册表的链接。注册将在数据库中添加用于身份验证的用户 现在,是否可以在注册完成后作为新用户自动登录,而不返回登录页面 更新 更多信息,请按要求提供: $CATALINA_BASE/conf/server.xml中的数据源: ... <GlobalNamingResources> ... <Resource auth="Container" type="javax.sql.Data

我有一个基于表单身份验证的Web应用程序。在登录页面上,我放置了一个指向公共注册表的链接。注册将在数据库中添加用于身份验证的用户

现在,是否可以在注册完成后作为新用户自动登录,而不返回登录页面

更新

更多信息,请按要求提供:

$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>

还有什么?有一个带有HTML注册表单的JSP,还有一个在提交表单时处理POST的servlet。它们都太长,无法粘贴到这里,但是servlet构建了一个新用户并将其保存在数据库中(通过hibernate)

之后,在初始页面上执行重定向,这将导致tomcat重定向到登录页面。所以我的问题是:有没有办法使用注册表中输入的用户名和密码来强制登录,并避免在登录页面上进一步重定向


我希望避免依赖tomcat的内部类;为了给你一个明智的建议,你没有提供太多的信息

我会这样做:

  • 在数据库中输入信息(注册)
  • 执行与用户单击“登录”后发生的相同操作
  • 重定向到与用户登录后相同的页面

如前所述;为了给你一个明智的建议,你没有提供太多的信息

我会这样做:

  • 在数据库中输入信息(注册)
  • 执行与用户单击“登录”后发生的相同操作
  • 重定向到与用户登录后相同的页面

    • 我有两个想法。创建一个新的HttpSession并尝试将用户放入会话。
      或者使用HTTP变量将用户名和密码传递到登录页面,并使用javascript自动提交表单。

      我有两个想法。创建一个新的HttpSession并尝试将用户放入会话。
      或者使用HTTP变量将用户名和密码传递到登录页面,并使用javascript自动提交表单。

      这里有一个可能的解决方案:登录过程中必须包含注册

      登录表单中包含注册表单的链接,两个表单也可以共享同一页面。以下是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>
      

      这里有一个可能的解决方案:注册必须包含在登录过程中

      登录表单中包含注册表单的链接,两个表单也可以共享同一页面。以下是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>
      

      这个问题似乎类似于


      简单的答案是调用
      request.login(用户名、密码)
      登录用户,然后将其重定向到正确的页面。

      此问题类似于


      简单的答案是调用
      request.login(用户名、密码)
      登录用户,然后将其重定向到正确的页面。

      可以。但是你没有提供足够的细节让我们给出合理的建议。是的,这是可能的。但是你没有提供足够的细节让我们给出合理的建议。问题在于,用户单击“登录”后发生的“操作”由tomcat控制,而不是由应用程序控制。我希望避免使用tomcat的内部类。登录后,如果用户登录,会在页面上创建什么来验证?使用注册表中的信息创建。重定向应该通过。是。问题在于,用户单击“登录”后发生的“操作”由tomcat控制,而不是由应用程序控制。我希望避免使用tomcat的内部类。登录后,如果用户登录,会在页面上创建什么来验证?使用注册表中的信息创建。重定向应该通过.I dit(最后),但注册必须包含在登录场景中。I dit(最后),但注册必须包含在登录场景中。
      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"));