在我正在开发的项目中,我们有一个公司LDAP服务器和一个存储令牌的自定义缓存,提供会话等,并且可以使用库连接到它并通过向用户发送用户名和密码进行身份验证并返回布尔值和角色列表。由于我们将使用Tomcat作为我们的Web应用程序,因此我决定创建自己的Tomcat Realm,它将使用此库对用户进行身份验证。
阅读各种帖子等,其中一个建议是扩展RealmBase(而不是仅实现Realm并覆盖所有必需的方法),所以我已经做到了。但我有一个问题,确切地说我需要覆盖哪些方法,以及Tomcat将调用它们的顺序。
public Principal authenticate(String username, String credentials) { /* */ }
这个似乎是我唯一需要进行基本身份验证的用户 - 用户输入用户名和密码,如果此方法不返回null,则会对其进行身份验证。它是否正确? Tomcat会尝试和调用各种不同的“身份验证”吗?方法,直到找到一个有效的方法?在这种情况下,重载如何工作?
我也对这种方法感到好奇:
protected String getPassword(String username) { /* */ }
我们使用的库使用用户名和密码,并告诉我用户是否经过身份验证 - 我无权检索用户存储的密码。但我不能放弃这种方法,或者编译失败,因为我还没有实现所需的方法。我可以将此方法保留,并让它返回null吗?或者,还有更好的方法?如果此方法仅在之后由Tomcat 使用,则调用authenticate方法,那么我可以保存该方法的密码。这会有用吗?
答案 0 :(得分:0)
按照server.xml,
全局context.xml,
和特定于webapp的context.xml
文件中出现顺序隐含的顺序调用它们。