0

我有一个 JSF 2 项目,正在使用 Eclipse Inigo 作为 IDE,并部署到 Tomcat 6(它在 VirtualBox 的虚拟机中运行以模拟目标环境)。我没有使用 Eclipse 进行部署。现在我只是导出一个 .war 文件并从 Tomcat 管理器屏幕部署它。我正在使用 HSQLDB 来存储用户、密码和用户角色。让我感到困惑的一个项目要求是我的 Web 应用程序必须是完全独立的。也就是说,我交付了一个 .war 文件,他们无需对 Tomcat 进行额外配置即可将其插入。

我已经阅读了大量关于配置我的项目以进行表单身份验证的内容,包括:SO question 1SO question 2SO question 3Tomcat Realm configJava EE 6 security等等。这些资源确实有助于理解如何配置我的项目。我以为我快到了。但是,当我部署 Web 应用程序并尝试访问受限页面时,我总是会收到登录错误页面。我尝试使用数据库中具有所需角色的各种用户之一登录,我认为数据库是根据Tomcat 文档设置的。

我读过的所有教程都与我的情况有所不同:

  1. 使用 Glassfish 而不是 Tomcat
  2. 使用BASIC身份验证而不是FORM
  3. 将用户、密码和角色存储在tomcat-users.xml而不是关系数据库表中
  4. server.xml在 .war 文件中而不是某处声明角色。

第 4 点尤其使我无法全面了解什么是可能的,什么是不可能的(开箱即用)。

稍后我将编辑此问题以发布代码(web.xml等),但首先我想问一个类似于“SO 问题 2”(上图)中的问题,其中 OP 询问是否可以进行表单身份验证无需在应用程序服务器中定义某些内容。在其中一个答案中,这听起来像是不可能的,但还不是很确定。

那么,是否可以在不修改服务器中的文件的情况下实现表单身份验证(特别server.xmltomcat-users.xml如许多教程所示)?DataSourceRealm可以在 .war 完全自包含的要求下完成表单身份验证吗?如果是这样,怎么做?我可以在我的 .war 中包含其他 .xml 文件来解决问题吗?我可以在web.xmland中包含我需要的所有内容context.xml吗?

我已经尝试在web.xmland中包含所有内容context.xml,但它不起作用。我认为除了文件中没有任何内容之外,我已经正确配置了一些东西server.xml

我暂时就这样吧。如果我需要的是可能的,我将使用代码进行编辑以试图找出我做错了什么,否则,我会省去麻烦。此外,如果使用表单身份验证无法满足我的需要,任何人都可以推荐一个好的替代方案来在自包含的 .war 中实现相同的目标吗?(由于没有更好的方式来描述它,我放弃了“独立的.war”这个词……如果有更好或更准确的术语,请告诉我。)

4

1 回答 1

1

不幸的是,你不能这样做。领域是在 server.xml 文件中配置的,因此如果要根据数据库对用户进行身份验证,则必须在 server.xml 文件中对其进行配置。

如果您想针对数据库对用户进行身份验证并确保您的所有配置都在您的 WAR 文件中,请考虑使用 Spring Security 框架:http ://static.springsource.org/spring-security/site/docs/3.1.x /reference/springsecurity-single.html 是一个伟大而简单的框架,解决了很多认证/授权问题。

于 2013-08-01T07:38:50.843 回答