4

我有一个使用j_security_check. j_security_check如果我知道用户名和密码,是否可以通过 JSP 页面以编程方式登录特定用户?我试图以这种方式将变量作为 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

4 回答 4

3

以下代码在 JSP 文件中适用于我:

String url = "j_security_check?j_username=" + username + "&j_password=" + password;
String redirectUrl = response.encodeRedirectURL(url);
response.sendRedirect(redirectUrl);
于 2013-04-01T13:18:02.790 回答
2

在我看来,j_security_check通过附加使用 url登录似乎是一个很大的安全性。usernamepassword

相反,您可以执行以下步骤:

  • 创建一个具有表单的单独 JSP
  • 此表单j_security_check使用用户名和密码在 url 上发布
  • 你可以动态地包含这个 JSP
  • 此 JSP 可以具有可以 POST 此表单的 onload (JS) 功能。

这样,它将是安全的。

于 2016-07-18T07:24:10.923 回答
1

你说你想以编程方式登录。如果这是您的目标,我会避免使用 j_security_check。j_security_check 与基于表单的身份验证一起使用(查看有关保护 Web 应用程序的 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,因此如果您仍在为这个问题苦苦挣扎,可能值得一看。

于 2014-09-13T06:48:48.957 回答
0

您可以让用户在 jsp 页面和 servlet 上输入用户名和密码,或者使用此处描述的 facelets 页面和 bean来登录用户。

于 2013-04-01T12:07:44.637 回答