1

我有一个需要实现 tomcat 身份验证的小型应用程序。在挖掘互联网后,我发现 Realm 是解决方案。我还知道了如何配置我的 tomcat-users.xml、server.xml 和 web.xml。但它仍然无法正常工作。

我在 web.xml 中添加了这段代码

<security-constraint>
    <web-resource-collection>
    <web-resource-name>hp</web-resource-name>
    <url-pattern>/pages/bill.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint>
    <role-name>Admin</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
     <auth-method>BASIC</auth-method>>
     <realm-name>default</realm-name>>
 </login-config>

在 login-config 中,我得到 Element 'login-config' cannot have character [children],因为该类型的内容类型是仅元素。可能是什么问题?

4

3 回答 3

4

您的 XML 无效 - 您有两个 ">" 字符

更正数据的结尾

<login-config>
     <auth-method>BASIC</auth-method>>
     <realm-name>default</realm-name>>
 </login-config>

<login-config>
     <auth-method>BASIC</auth-method>
     <realm-name>default</realm-name>
 </login-config>

我不确定tomcat会为您的无效xml提供什么错误,但它肯定不会按原样工作。

于 2013-06-19T14:14:46.590 回答
3

这个问题可能已经在这个网站的其他地方得到了回答。但这里有一些帮助。

  1. 不要使用 BASIC(也不是 DIGEST)身份验证,使用 FORM 身份验证。这就是为什么:如何强制 Jetty 在会话无效后通过 BASIC 身份验证请求凭据?

  2. 您可能希望首先从(表单身份验证和)内存领域开始(即在 tomcat-users.xml 中定义用户和角色),然后可能会尝试使用 JDBC 领域,最后是 DatasourceRealm。

阅读Tomcat 文档以了解这种爵士乐是如何工作的。

我写了一些关于这个主题的笔记(身份验证方法和领域),看看,应该比遵循 tomcat 文档更容易。https://sites.google.com/site/adrienitnotes/java/web-apps-login-system-in-tomcat-container

  • 警告:您可能会从内存领域开始,在 Eclipse 中运行 Tomcat 时要小心(tomcat-user.xml 配置更改问题):

当您创建一个新服务器时,一组配置文件会从您的 Tomcat 安装导入(复制)到您工作区中 Servers 项目下的相应文件夹中。有时 Eclipse 不会更新此文件,因此您的更改将被忽略。

解决方案1:建议在Tomcat中手动部署.war文件来运行此类应用程序(在Eclipse之外运行Tomcat)。

解决方案 2:使用相关更改修改 localhost-config\tomcat-users.xml 中的 \Servers\Tomcat v7.0 Server可能会解决此问题。

于 2012-09-25T12:26:09.217 回答
1

我碰巧偶然发现了这个老问题,你可能很久以前就解决了这个问题,但我想我还是可以提供一个答案。

和之后有多余的>字符。删除那些应该可以解决问题。</auth-method></realm-name>

于 2013-06-19T15:09:04.307 回答