【发布时间】:2016-05-02 15:47:09
【问题描述】:
我正在尝试编写一个通过客户端证书对用户进行身份验证的小型 Java 应用程序。 我在 Tomcat 中看到我可以在领域描述符中指定 X509UsernameRetrieverClassName 来告诉 tomcat 使用我自己实现的将 X509 证书映射到用户名的函数。 唯一不起作用的是它找不到我指定的类,即使我有一个包并且直接在实现函数 org.apache.catalina.realm.X509UsernameRetriever 的类中。 在谷歌上搜索了很多之后,我仍然没有找到这个问题的任何答案。
任何帮助将不胜感激!
更新:
我在我的 context.xml 文件中为 webapp 配置这个类:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">
<Realm className="org.apache.catalina.realm.MemoryRealm"
X509UsernameRetrieverClassName="com.packagename.UserFromCert"
pathname="conf/tomcat_users.xml"/>
</Context>
我已经实现了这个类(仅用于测试)
package com.packgename;
import java.security.cert.X509Certificate;
public class UserFromCert implements org.apache.catalina.realm.X509UsernameRetriever {
@Override
public String getUsername(X509Certificate x509Certificate) {
System.out.println(x509Certificate.getSubjectDN().toString());
System.out.println(x509Certificate.getSubjectX500Principal().getName());
return x509Certificate.getSubjectDN().toString();
}
}
我试图实现的类在 tomcat 库中。
【问题讨论】:
-
如果包含 Tomcat 配置文件可能会有所帮助。另外,这个实现类是怎么包含的?它在战争中吗?是在Tomcat的lib目录下吗?
-
你把你的课放在哪里了?在你的战争中?
-
我把我的课直接放在包里了。我猜它被部署到了战争中的tomcat。
标签: java tomcat authentication servlets client-certificates