如何通过编程实现j_security_check的登录

4

我有一个使用j_security_check的JSP Web应用程序。如果我知道用户ID和密码,是否可以通过JSP页面以编程方式将特定用户登录到j_security_check?我尝试以以下方式将变量作为URL参数传递...

我有一个使用j_security_check的JSP Web应用程序。如果我知道用户ID和密码,是否可以通过JSP页面以编程方式将特定用户登录到j_security_check?我尝试以以下方式将变量作为URL参数传递...
response.sendRedirect(www.mydomain.com/j_security_check?j_username=someUserName&j_password=somePassword )

但是它不起作用。有没有办法解决?

编辑: 这是我的登录页面,目前正常工作。出于安全原因,我删除了一些代码。

    <form name="signon" method="post" action="/j_security_check">
      <table width="100%" cellpadding="4" cellspacing="0">

        <tr>
          <td valign="top" colspan="4">
            <h2><%= UI.tr(null, "login_details") %>
            </h2>
          </td>
        </tr>

        <tr>
          <td valign="top" width="150px">
            <%= UI.tr(null, "login_id") %>
          </td>
          <td valign="top" width="150px">
            <%= UI.tr(null, "login_pass") %>
          </td>
          <td valign="top" width="150px">
            <%= UI.tr(null, "login_token_or_captcha") %>
          </td>
          <td width="100%">&nbsp;</td>
        </tr>


        <tr>

          <%
            if (logins == null) {
          %>
          <td>
            <input type="hidden" name="j_uri" value="/index.jsp">
            <input type="text" id="username" name="j_username" size="16" style="width: 150px;" autocomplete="off" <%= username == null ? "" : "disabled value='" + username + "'" %> onblur="return checkCaptcha();">
          </td>
          <%
          } else {
          %>
          <td>
            <select name="j_username" style="width: 150px;">
              <%
                for (Login login : logins) {
              %>
              <option><%= login.getUsername() %>
              </option>
              <%
                }
              %>
            </select>
          </td>
          <%
            }
          %>
          <td><input type="password" name="j_password" size="16" style="width: 150px;">                </td>
          <td><input type="text" id="mypw" name="mypw" size="16" autocomplete="off" style="width: 150px;"></td>
          <td><input class="submit" type="submit" name="submit" value="<%= UI.tr(null, "login_submit") %>"></td>
        </tr>




<tr>
  <td valign="top" colspan="4">
    <%-- <%
    if("registry.nic.hn".equals(request.getServerName())) {
    %>
    <!-- GARTH - put whatever you want here for .HN -->
    &nbsp;
    <% } else { %> --%>
        <h2><%= UI.tr(null, "login_news") %>
        </h2>
        <div><%= HTMLFormat.addBreaks(SiteConf.getSiteConf().getNews()) %>
        </div>
    <%-- <% } %>     --%>
  </td>
</tr>

4个回答

3
以下代码对我在JSP文件中有效:
```html

以下代码对我在JSP文件中有效:

```
String url = "j_security_check?j_username=" + username + "&j_password=" + password;
String redirectUrl = response.encodeRedirectURL(url);
response.sendRedirect(redirectUrl);

它对我没有用。有关于 j_security_check 的配置或其他内容吗? - Ozgur Dogus
1
你使用什么框架进行身份验证?Tomcat表单认证吗? - Michael
1
你如何进行常规身份验证?没有编程身份验证的情况下? - Michael
请问您能够检查一下我的登录页面吗? - Ozgur Dogus
2
你还需要咨询一下创建认证框架的人。 两个注释:1)登录表单使用“post”方法。上面的JSP代码使用“get”方法。如果框架不支持,则无法正常工作(Tomcat表单身份验证支持它)。 2)登录表单中有附加的输入参数:“mypw”。期望的值是什么? 也许你也应该传递它?String url =“j_security_check?j_username =”+用户名+“& j_password =”+密码“& mypw =”+ mypw_value - Michael

2
在我的看法中,使用j_security_check URL附加usernamepassword进行登录似乎是一个很大的安全漏洞。
相反,您可以执行以下步骤:
  • 创建一个单独的JSP表单
  • 该表单在j_security_check URL上用用户名和密码进行POST
  • 您可以动态包含此JSP
  • 此JSP可以具有onload(JS)函数,可以将此表单POST。
这样就会更加安全。

1
您提到希望以编程方式登录。如果您的目标是这样做,我建议避免使用j_security_check。j_security_check用于基于表单的身份验证(请查看此Oracle资源:http://docs.oracle.com/cd/E24329_01/web.1211/e24485/thin_client.htm,其中有关表单身份验证的内容位于页面中部)。
我建议您查看该资源并深入研究一些替代方案,但完全另一种方法是使用Java身份验证和授权服务(JAAS)API(这是教程链接:http://docs.oracle.com/javase/6/docs/technotes/guides/security/jaas/tutorials/GeneralAcnOnly.html)。 JAAS和回调处理程序是以非抽象方式编程地解决身份验证(和授权)的方法。许多强大的框架都基于此JAVA API,因此如果您仍在努力解决此问题,可能值得一看。

0

您可以让用户在JSP页面上输入用户名和密码,然后使用Servlet进行登录,或者使用Facelets页面和Bean(如此处所述)来登录用户。


嗨。首先感谢您的回答。我不想让用户输入密码或用户名。我只想通过预定义的用户以编程方式登录到j_security_check。在JSP页面上是否有可能实现这一点? - Ozgur Dogus
jsp页面应只用于获取用户的登录信息,并将该信息发送到一个处理用户登录的servlet,使用request.login(username,password)方法。 - ChadNC
我该如何发送日志信息?在JSP页面中,我看不到request.login方法? - Ozgur Dogus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接