Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 找不到类异常X509UsernameRetrieverClassName Tomcat_Java_Tomcat_Authentication_Servlets_Client Certificates - Fatal编程技术网

Java 找不到类异常X509UsernameRetrieverClassName Tomcat

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的类中。 在谷歌搜索了很多之后,我仍然没有找到这个问题的任何答案 任何帮助

我正试图编写一个小型Java应用程序,通过客户端证书对用户进行身份验证。 我在Tomcat中看到,我可以在领域描述符中指定X509UsernameRetrieverClassName,告诉Tomcat使用我自己的函数实现,该函数将X509证书映射到用户名。 唯一不起作用的是,它找不到我指定的类,即使我有一个包并且直接在实现函数org.apache.catalina.realm.x509usernamerequiriever的类中。 在谷歌搜索了很多之后,我仍然没有找到这个问题的任何答案

任何帮助都将不胜感激

更新:

我在我的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>

我试图实现的类在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的。