身份验证:Java EE 6中最简单的形式

时间:2012-05-10 05:35:44

标签: java-ee authentication jboss java-ee-6

我知道这个问题不是一个好问题,因为它可以接受大量的答案,但现在是:

我是Java EE 6的新手(在JBoss AS 7上),我来自Tomcat + spring世界。 我的第一个真正的Web应用程序就像一个简单的crud jsf jpa hibernate和ejb。 现在我需要使用最简单的登录表单来保护URL(/ admin / *)。 我已经有两个表(hibernate实体)名为“User”(用户名,密码,role_id和其他数据)和“Role”(代码,名称和更多)。 我可以创建自己的LoginController,会话作用域管理登录相关的问题,但我不知道如何说“嘿,它只适用于/ admin路径!” 所以....我开始阅读有关web.xml配置的内容:安全性约束,jdbc领域等等。但是,抱歉,但我仍然无法达到一个很好的知识点,我太沉迷于教程和边做边学。

您能帮我找一个简单登录表单的示例项目吗? 或者至少有一些教程或一些关于如何将我的登录表单绑定到我的数据库表的建议?我不需要500页的准确文档。只是尝试使“标准”认证工作。

1 个答案:

答案 0 :(得分:1)

确定。首先,Java EE标准不提供认证机制。只有基于角色的身份验证才是规范的一部分。因此,每个应用程序服务器都必须具有自定义身份验证机制,这使我们能够使用数据库,LDAP等来存储用户凭据。

如果是JBoss,它看起来如下。

(1)您需要在web.xml中定义security-constraint(有很多教程如何执行此操作)。它告诉哪些URL需要登录。您需要定义login-config元素,以便选择用户登录的方式 - 使用浏览器弹出窗口或自定义表单。

(2)您需要在配置/ standalone.xml中的JBoss端安全域上进行定义。例如,请参阅this example

(3)您需要加入(1)和(2)。这是在jboss-web.xml文件中使用您的应用程序的WEB-INF完成的。看起来或多或少

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
          <security-domain>NAME-OF-DOMAIN-DEFINED-IN-STEP-2</security-domain>
          <context-root>ROOT-OF-YOUR-APP</context-root>
</jboss-web>

我不确定JBoss 7的情况如何,但在之前的版本中,您需要添加java:/jaas/前缀,因此安全域内容为java:/jaas/NAME-OF-DOMAIN-DEFINED-IN-STEP-2

此外,如果你了解Spring Framework,你可以考虑使用Spring Security,绕过Java EE机制。