关于java:容器vs Servlet身份验证

Container vs Servlet Authentication

我正在使用Servlet和JPA创建一个Web应用程序。我有一个存储用户名,密码和角色的用户表。我想为这些用户创建登录和用户注册功能,以便某些用户可以访问我的某些内容。
在准备好Servlet规范以及Tomcat(我使用的容器)之后,我遇到了两种定义用户和系统角色的方法。

Tomcat规范建议我可以使用Realms绑定到另一个数据库,以便可以根据需要选择使用SSO。
Servlet具有自己的使用web.xml定义用户和角色的方式,例如基本身份验证,Servlet容器也使用Realms。

但是在Servlet和容器中创建用户和角色似乎是系统管理员要做的事情。我正在寻找的是自我注册。

上面的问题凸显了我对这些方法的困惑,我不知道我要进行的方法是否正确或安全?
有人可以解释这些身份验证方法之间的区别吗?
为什么要选择一个?
我计划对J2E模型使用自我注册是个坏主意还是不安全?


如果您将用户ID,密码和角色存储在数据库中,并以此验证用户输入,则此后您自己就可以了。这意味着以后,当您可能想限制一组特定用户角色对特定内容的访问时,您将不得不对照该用户查找存储在数据库表中的角色,并编写允许/限制该用户的代码。 。

但是,如果您将用户"推送"到基础容器,则该容器可以代表应用程序执行大多数工作(这是有关领域和角色等工作的地方)。了解这一点的一个很好的起点是阅读有关JAAS

的教程


我认为您在用户和角色之间感到困惑。在web.xml中,您必须将角色与资源相关联,例如"对/ admin的所有请求都应具有角色Administrator",然后,在管理工具下创建用户并为这些用户分配适当的角色。