我目前正在开发一个使用alfresco作为ged和spring作为框架的java / jee应用程序。我想在导航器中显示一个文件而没有验证要求。所以我该怎么做。通过我有2个模块的方式我的项目:通过休息调用进行通信的前端和后端。从后端我试图传递对象的字节数组但不幸的是我收到它作为字符串所以我无法使用它。所以任何建议来解决这个问题问题?
public Map<String, Object> getCourrierDetails(String idCourrier) throws Exception {
Map<String, Object> courriersDetails = runtimeService.getVariables(idCourrier);
courriersDetails.put("idCourrier", idCourrier);
DocumentDaoImpl dao=new DocumentDaoImpl();
Document docCmis = (Document) dao.getDocument("workspace://SpacesStore/73871a36-9a6c-42c6-b3e3-7d68362fe9c0");
byte[] myByteArray = readContent(docCmis.getContentStream().getStream());
ByteArrayResource resource = new ByteArrayResource(myByteArray) {
@Override
public String getFilename() {
return docCmis.getContentStreamFileName();
}
};
System.out.println(resource.getFilename());
//courriersDetails.put("resources", myByteArray);
System.out.println(courriersDetails.get("resources")+" rrrr");
//courriersDetails.put("contentStream",docCmis.getContentStream().getStream());
return courriersDetails;
}
答案 0 :(得分:3)
假设您的前端和后端是自定义的并且您的后端与Alfresco进行通信,那么您需要做的就是编写一个驻留在后端的代理。
代理可以使用可以访问内容的预配置“服务帐户”与Alfresco建立会话。通过这种方式,使用您的自定义Web应用程序的人不会使用自己的凭据从Alfresco获取对象。相反,使用服务帐户,Web应用程序将其流式传输给请求者。
例如,在我的一个项目中,我有一个AssetService,它使用CMIS从给定ID的内容中获取InputStream:
public InputStream download(String assetId) {
CmisObject obj = session.getObject(assetId);
Document doc = null;
if (obj.getBaseTypeId().equals(BaseTypeId.CMIS_DOCUMENT)) {
doc = (Document) obj;
}
return doc.getContentStream().getStream();
}
然后,我的Controller只是要求资产的服务获取一些信息以便于设置一些有用的标题,然后它从资产服务获取输入流并返回:
@RequestMapping(value = "/api/asset/{assetId:.+}/download/{name}", method = RequestMethod.GET)
public ResponseEntity<InputStreamResource> downloadAsset(
@PathVariable("assetId") String assetId,
@PathVariable("name") String name) {
// get the asset so we can get some info about it
Asset asset = assetService.getAsset(assetId);
// set the http headers (mimetype and length at a minimum)
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.parseMediaType(asset.getMimetype()));
httpHeaders.setContentLength(asset.getLength());
// get the content stream
InputStream inputStream = assetService.download(assetId);
InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
return new ResponseEntity<InputStreamResource>(inputStreamResource, httpHeaders, HttpStatus.OK);
}
此示例在Spring Boot应用程序中使用Spring MVC,但当然,如果需要,您可以使用普通的旧servlet执行类似操作。
答案 1 :(得分:2)
一种选择是编写自己的Web脚本,并以允许访客访问的方式进行设置。
http://docs.alfresco.com/4.1/concepts/ws-authenticating.html
还有一个完全禁用权限检查的选项,但我从未尝试过。
https://community.alfresco.com/thread/175381-disabling-permission-checking