【问题标题】:Form Based Authentication基于表单的身份验证
【发布时间】:2014-12-13 14:04:00
【问题描述】:

我有编写 Java 应用程序的经验,但从来没有任何 Web 应用程序,所以 xml 对我来说相对较新。我在研究中学到了很多东西,但我现在很困惑,希望大家能帮助我。

背景:我工作的公司聘请了一名承包商来开发库存软件。开发人员选择在公司的 Intranet 上创建一个 Web 应用程序(根本没有连接到 Internet)。几个月后,经过几次修改,开发人员出于未知原因退出了该项目(至少对我而言)。所以这里我使用 .war 文件进行逆向工程,然后完成项目!

我已经配置了 Tomcat 和 MS SQL Server,根据 Netbeans,所有连接都很好。我可以部署应用程序,但这是我卡住的地方。 index.jsp 包含一个 login.jsp。查看这些页面的代码让我感到困惑。

据我所知,开发人员正在使用基于表单的身份验证,以便在登录时确定用户角色。我根本不明白这段代码是如何重定向到任何页面的,更不用说做任何事情了:

<form method="POST" action='<%= response.encodeURL("j_security_check") %>' >
    <table border="0" cellspacing="5">
    <tr>
        <td>
            Username:<br>
            <input type="text" name="j_username" style="width: 200px;">
        </td>
    </tr>
    <tr>
        <td>
            Password:<br>
            <input type="password" name="j_password" style="width: 200px;">
        </td>
    </tr>
    <tr>
        <td><br></br><input type="submit" value="Log In" class="buttonStyle"> <input type="reset" class="buttonStyle"></td>
    </tr>
    </table>
</form>

具体来说,是什么告诉应用程序登录是好是坏?单击按钮时什么处理事件?

感谢您的耐心和帮助!

【问题讨论】:

标签: java jsp tomcat web j-security-check


【解决方案1】:

阅读Java Servlet Specification,特别是第 13.6.3 节。阅读规范听起来很吓人,但 Java Servlet 规范是我读过的最具可读性的规范之一:它是供程序员阅读的,而不是律师阅读的。

快速总结是,当用户尝试访问受保护的页面(并且尚未通过身份验证)时,他们会看到登录页面。 “提交”按钮将用户名和密码发布到 servlet 容器 (Tomcat),该容器执行身份验证(检查用户名/密码)并返回登录页面(如果用户名/密码不正确)或将用户重定向回来到他们最初请求的受保护页面。

这里发生了一些不明显的事情,因为容器 (Tomcat) 正在为您处理它。阅读规范——实际上是整件事——会让你深入了解一切是如何工作的,并且会让你更好地准备好照看你继承的这段代码。

2014-10-22 13:45 EDT 更新

要确定正在执行的身份验证类型,您需要在 Web 应用程序的 META-INF/context.xml 文件或 Tomcat 的 conf/server.xml 中查找 &lt;Realm&gt; 元素,该元素嵌套在 Web 应用程序的 &lt;Context&gt; 元素中.它将指示正在使用的领域类型(通常“内存”代表conf/tomcat-users.xml,或DataSource/JDBC 表示身份验证信息在关系数据库中等)。

规范没有涵盖任何“领域”的东西。为此,您必须参考 Tomcat 文档,或加入 Tomcat 用户列表和社区。​​p>

【讨论】:

  • 好的,感谢您的帮助。尽管我不确定原始开发人员如何设置原始用户名和密码,但我现在已经掌握了一些知识。我已经编辑了 tomcat-users.xml 文件,试图添加更多内容,但除了配置为管理员的管理员之外,我无法登录。
  • 这很有趣......在context.xml 文件中,领域被指定为使用LDAP 的JNDI,但它都被注释掉了。我可以看到服务器的名称和所有内容,但显然没有使用。使用 cmets,文件基本上是空的。
  • 尝试查找在这些位置中的 任何 个配置的任何 &lt;Realm&gt;。如果没有配置 Realm,则根本没有用户名/密码组合。
  • 好的,我会试试的。首先,我必须访问列出的服务器,这可能需要一段时间。感谢您的帮助!
猜你喜欢
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多