WLS 10.3:在认证失败后显示不友好的错误信息给用户
应用范围:
Oracle Weblogic 服务器 - Version: 10.3 或之后发布的版本
本文档的信息可以应用到任何平台上
目的
当一个到期的应用程序被双向的SSL访问时,WLS证书验证器将拒绝用户访问该应用程序,但是一个403 FORBIDDEN错误被抛出到客户端浏览器,这个被用户浏览器截获的错误消息会跳转到应用程序的一个自定义错误页面,怎样才能重定向以至于不显示关于403 Forbidden错误呢?
解决方法
解决方法显然是呼叫WLS CertPath 校验器,校验器是来自一个自定义Asserter身份,所以它将使用下面的示例代码返回自定义的错误信息:
java.security.cert.X509Certificate[] certChain = null;
try {
if (token instanceof java.security.cert.X509Certificate[]) {
certChain = (java.security.cert.X509Certificate[]) token;
serialNumber = certChain[0].getSerialNumber();
}
else if (token instanceof sun.security.x509.X509CertImpl[]) {
certChain = (sun.security.x509.X509CertImpl[]) token;
serialNumber = certChain[0].getSerialNumber();
} else {
throw new IdentityAssertionException("无效的标记类型 "
+ formAuthUserID);
}
CertPath certPath;
java.security.cert.CertificateFactory cf1 = java.security.cert.CertificateFactory
.getInstance("X.509");
ArrayList certList = new ArrayList(certChain.length);
for (int i = 0; i < certChain.length; i++)
certList.add(certChain[i]);
try {
certPath = cf1.generateCertPath(certList);
System.out.println("生成Cerpath路径...");
} catch (CertificateException ex) {
certPath = cf1.generateCertPath(certList);
}
CertPathValidator validator = CertPathValidator
.getInstance("WLSCertPathValidator");
X509Certificate x509TrustedCAs[] = null;
CertPathValidatorParameters params = new CertPathValidatorParameters(
WEBLOGIC_REALM, x509TrustedCAs, context);
CertPathValidatorResult certPathValidatorResult = validator
.validate(certPath, params);
错误
HTTP-403