有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java由于缺少用于目标resourceClient证书身份验证的有效身份验证凭据,因此未应用该请求

我的应用程序中的一些资源在访问它们之前需要客户端证书,但不是所有资源。所以我把它们放在url模式“/secured/*”下 并在我的网站上添加了以下内容。xml

<security-constraint>
<web-resource-collection>
<web-resource-name>Secured</web-resource-name>
<url-pattern>/secured/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>cert</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

<login-config>
<auth-method>CLIENT-CERT</auth-method>
</login-config>

<security-role>
<role-name>*</role-name>
</security-role>

我在servlet中添加了以下几行代码。xml

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
               
               <Connector
               protocol="org.apache.coyote.http11.Http11NioProtocol"
               port="8443" maxThreads="200"
               scheme="https" secure="true" SSLEnabled="true"
               keystoreFile="placeholdertokeystorefile" keystorePass="placeholderforpass"               truststoreFile="placeholderfortruststorefile"  truststorePass="placeholderforpass"
               clientAuth="false" sslProtocol="TLS"/>

但它部分起作用,即当用户在“/secured/*”下请求资源时,浏览器会在弹出窗口中提示用户证书列表。但选择后,tomcat重定向401页(未经授权),不显示资源。我甚至尝试实现简单的自定义领域,比如

public class MyRealm extends NullRealm {

    @Override
    protected Principal getPrincipal(X509Certificate certificate) {

        return new GenericPrincipal(certificate.getSubjectDN().getName(),null,null);
    }

}

并在tomcat的conf/context中引用了它。xml文件(不确定这是正确的位置)和我放在tomcat home/lib/folder中的jar文件

但我仍然得到“由于缺少目标资源的有效身份验证凭据,请求未被应用。”

你知道如何解决这个问题吗?一般来说,用一只雄猫来处理这个案件是一个好的做法吗?或者我应该使用分布式体系结构aka 2 Tomcat应该驻留在后端(一个clientauth=true,另一个clientauth=false)

更新:我在网上找到的建议是向tomcat用户添加用户名。xml,但在我的例子中,这是不可能的,因为我们有很多用户,手动添加这些用户可能会造成维护问题


共 (0) 个答案