1

设置:

我在我的一个项目中使用 Spring-MVC。我必须访问一个我必须使用自签名证书的 URL。我正在使用以下代码service来执行此操作,并且一切正常。

TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
    @Override
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return null;
    }

    @Override
    public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
    }

    @Override
    public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
    }
}};

// Install the all-trusting trust manager
try {
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (GeneralSecurityException e) {
    LOGGER.error(e);
}

问题:

由于此代码在 my 中service,因此每次通过 this 发出新请求时都会执行它service。有没有办法让这段代码只执行一次而不是每次请求?一些带有实际代码的示例将不胜感激。

如果需要更多解释,请发表评论。

4

2 回答 2

1

例如,您可以将此代码放入单独的 Spring bean 的 init 方法中,它将在您的应用程序启动期间执行:

@Component
public class TrustManagerConfigurer {
    @PostConstruct
    public void installTrustManager() { ... }
}

或者,您可以将其放入ServletContextListener.contextInitialized()以达到相同的效果。

也可以看看:

于 2012-07-02T07:51:08.657 回答
0

只需将 ServletContext 保存在某处,而不是每次都重新创建它。

你知道这段代码根本不安全吗?并且该问题的正确解决方案是将证书导入您的信任库?

于 2012-07-02T08:22:38.547 回答