Java 容器与Servlet身份验证

Java 容器与Servlet身份验证,java,jsp,tomcat,servlets,Java,Jsp,Tomcat,Servlets,我正在使用servlet和JPA创建一个web应用程序。我有一个存储用户名、密码和角色的用户表。我想为这些用户创建登录和用户注册功能,以便某些用户可以访问我的部分内容。 在我准备阅读Servlet规范和Tomcat(我使用的容器)时,我遇到了两种定义系统用户和角色的方法 Tomcat规范建议我可以使用Realms连接到另一个数据库,这样如果我愿意,我可以选择使用SSO。 Servlet使用web.xml定义用户和角色有自己的方式,例如基本身份验证,Servlet容器也有自己的方式,使用领域 但是

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

Tomcat规范建议我可以使用Realms连接到另一个数据库,这样如果我愿意,我可以选择使用SSO。 Servlet使用web.xml定义用户和角色有自己的方式,例如基本身份验证,Servlet容器也有自己的方式,使用领域

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

上面的这个问题突出了我对这些方法的困惑,我不知道我想要的方法是正确的还是安全的? 有人能解释一下这些身份验证方法之间的区别吗? 为什么选择一个而不是另一个?
对于J2E模型,我使用自注册的计划是一个坏主意还是不安全?

我认为您对用户和角色感到困惑。在web.xml中,您必须将角色与资源相关联,例如“对/admin的所有请求都应具有角色管理员”,然后,您可以在管理工具下创建用户,并向该用户指定适当的角色。

如果您将用户ID、密码和角色存储在数据库中,并根据该数据库验证用户输入,从那以后你就得靠自己了。这意味着,稍后当您可能希望限制对特定用户角色集的特定内容的访问时,您必须针对该用户查找存储在db表中的角色,并编写允许/限制该用户的代码

但是,如果您将用户“推送”到底层容器,那么容器可以代表应用程序完成大部分工作(这就是领域和角色等内容的来源)。了解这一点的一个很好的起点是阅读关于