Java 找不到类异常X509UsernameRetrieverClassName Tomcat
我正试图编写一个小型Java应用程序,通过客户端证书对用户进行身份验证。 我在Tomcat中看到,我可以在领域描述符中指定X509UsernameRetrieverClassName,告诉Tomcat使用我自己的函数实现,该函数将X509证书映射到用户名。 唯一不起作用的是,它找不到我指定的类,即使我有一个包并且直接在实现函数org.apache.catalina.realm.x509usernamerequiriever的类中。 在谷歌搜索了很多之后,我仍然没有找到这个问题的任何答案 任何帮助都将不胜感激 更新: 我在我的context.xml文件中为webapp配置此类:Java 找不到类异常X509UsernameRetrieverClassName Tomcat,java,tomcat,authentication,servlets,client-certificates,Java,Tomcat,Authentication,Servlets,Client Certificates,我正试图编写一个小型Java应用程序,通过客户端证书对用户进行身份验证。 我在Tomcat中看到,我可以在领域描述符中指定X509UsernameRetrieverClassName,告诉Tomcat使用我自己的函数实现,该函数将X509证书映射到用户名。 唯一不起作用的是,它找不到我指定的类,即使我有一个包并且直接在实现函数org.apache.catalina.realm.x509usernamerequiriever的类中。 在谷歌搜索了很多之后,我仍然没有找到这个问题的任何答案 任何帮助
<?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>
我试图实现的类在tomcat库中。几年前,我在之前的合同中对tomcat 6.0做了一些非常类似的事情。我的记忆有点模糊,我把代码忘在后面了(对不起!),但我希望这能帮助你(或其他人)朝着正确的方向前进 我所做的是: 1) 将Catalina源代码导入Eclipse
2) 在同一项目中的新文件中创建所需的新类-My是一个自定义实现,用于将证书的可分辨名称中的值映射到用户名:
package org.apache.catalina.realm;
import java.security.cert.X509Certificate;
public class CustomX509SubjectDnMapper implements X509UsernameRetriever {
public String getUsername(X509Certificate clientCert) {
return clientCert.getSubjectDN().getName().toLowerCase();
}
}
3) 将代码导出到新的Catalina.jar文件4) 在Tomcat的lib目录中包含这个新的Catalina.jar文件 我不记得是否将自定义实现保存在同一个包中。我发现关键是将定制实现放到Tomcat可以使用的定制Catalina.jar中。还可以导出一个引用Catalina的自包含jar,并将其导入到Tomcat容器中
不管怎样,我希望这能在某些方面有所帮助,祝你好运。几年前,我在之前的合同中对Tomcat 6.0做了类似的事情。我的记忆有点模糊,我把代码忘在后面了(对不起!),但我希望这能帮助你(或其他人)朝着正确的方向前进 我所做的是: 1) 将Catalina源代码导入Eclipse
2) 在同一项目中的新文件中创建所需的新类-My是一个自定义实现,用于将证书的可分辨名称中的值映射到用户名:
package org.apache.catalina.realm;
import java.security.cert.X509Certificate;
public class CustomX509SubjectDnMapper implements X509UsernameRetriever {
public String getUsername(X509Certificate clientCert) {
return clientCert.getSubjectDN().getName().toLowerCase();
}
}
3) 将代码导出到新的Catalina.jar文件4) 在Tomcat的lib目录中包含这个新的Catalina.jar文件 我不记得是否将自定义实现保存在同一个包中。我发现关键是将定制实现放到Tomcat可以使用的定制Catalina.jar中。还可以导出一个引用Catalina的自包含jar,并将其导入到Tomcat容器中
无论如何,我希望这能在某些方面有所帮助,祝你好运。如果你包含Tomcat配置文件,可能会有所帮助。另外,这个实现类是如何包含的?是在战争中吗?它在Tomcat的lib目录中吗?你把你的类放在哪里了?在你的战争中?我把我的班级直接放在包裹里。我想它是在战争中部署到tomcat的。如果您包含tomcat配置文件,可能会有所帮助。另外,这个实现类是如何包含的?是在战争中吗?它在Tomcat的lib目录中吗?你把你的类放在哪里了?在你的战争中?我把我的班级直接放在包裹里。我想它是在战争中部署到tomcat的。