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) 个答案