我已经通过API生成了一个PKCS12密钥库,但该进程的返回是一个KeyStore对象。当客户端发送请购单时,我需要将其直接发送到浏览器进行下载。
我该怎么做?
我正在使用java和jboss 5AS。
答案 0 :(得分:2)
您可以使用KeyStore#store()
将其写入OutputStream
。
keyStore.store(outputStream, password);
基本上就是这样。 OutputStream
可以是HTTP响应之一。有关如何在JSF中提供文件下载的通用启动示例,您需要集成此行,请转到此答案:How to provide a file download from a JSF backing bean?使用application/x-pkcs12
{{1}}。
答案 1 :(得分:1)
以下是代码:
public void cadastrar () throws Exception
{
byte[] encodedKeyStore = controlador.cadastrar(certificadoModel);
java.security.KeyStore keyStore = java.security.KeyStore.getInstance("PKCS12");
keyStore.load(new ByteArrayInputStream(encodedKeyStore), certificadoModel.getPassword().toCharArray());
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
ec.responseReset();
ec.setResponseContentType("application/x-pkcs12");
//ec.setResponseContentLength(contentLength);
ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + certificadoModel.getUsername() + ".p12" + "\"");
OutputStream output = ec.getResponseOutputStream();
keyStore.store(output, certificadoModel.getPassword().toCharArray());
fc.responseComplete();
}