使用Tomcat DataSourceRealm进行JSF项目表单身份验证

时间:2013-07-30 18:24:16

标签: jsf java-ee authentication tomcat6

我有一个JSF 2项目,我正在使用Eclipse Inigo作为IDE,并部署到Tomcat 6(它在VirtualBox中的虚拟机中运行以模仿目标环境)。我没有使用Eclipse进行部署。现在我只是导出.war文件并从Tomcat管理器屏幕部署它。我使用HSQLDB来存储用户,密码和用户角色。导致我混淆的一个项目要求是我的网络应用程序必须完全独立。也就是说,我发送一个.war文件,然后将它插入而无需对Tomcat进行额外配置。

我已经阅读了大量有关配置表单身份验证的项目,包括:SO question 1SO question 2SO question 3Tomcat Realm configJava EE 6 security和更多。这些来源真的有助于了解如何配置我的项目。我以为我差不多了。但是,当我部署Web应用程序并尝试访问受限制的页面时,我总是会收到登录错误页面。我尝试使用所需角色在数据库中的各个用户之一登录,我认为数据库是根据Tomcat Documentation设置的。

我读过的所有教程都以某种方式与我的情况不同:

  1. 使用Glassfish代替Tomcat
  2. 使用BASIC身份验证代替FORM
  3. tomcat-users.xml而不是关系数据库表
  4. 中存储用户,密码和角色
  5. server.xml中声明角色,而不是.war文件中的某个地方。
  6. 第4点特别阻止我完全理解什么是可能的(开箱即用)。

    我稍后会编辑此问题以发布代码(web.xml等),但首先我想提出类似于'SO问题2'(上图)中的问题,其中OP询问是否可以在不定义应用程序服务器中的内容的情况下进行表单身份验证。在其中一个答案中,它听起来有点不可能,但它并不十分明确。

    那么,是否可以在不修改服务器中的文件的情况下实现表单身份验证(特别是server.xmltomcat-users.xml,正如许多教程所示)?可以使用DataSourceRealm形成身份验证,并且完全自包含.war的要求吗?如果是这样,怎么样?我可以在我的.war中包含额外的.xml文件吗?我可以在web.xmlcontext.xml

    中添加我需要的内容吗?

    我尝试将所有内容都包含在web.xmlcontext.xml中,但它无效。我认为除了server.xml文件中没有任何内容外,我已正确配置了一些内容。

    我现在就把它留在那里。如果我需要的是可能的,我将用代码编辑以试图找出我做错了什么,否则,我会省去麻烦。此外,如果我需要使用表单身份验证不可能,那么任何人都可以推荐一个很好的替代方案来实现自包含的.war吗? (由于缺乏一种更好的描述方式,我正在抛弃“自足的.war”这个术语......如果有更好或更准确的术语,请告诉我。)

1 个答案:

答案 0 :(得分:1)

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

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