Я в настоящее время разрабатываю приложение java/jee, используя alfresco, как ged и spring, как framework.I хочу отобразить файл в навигаторе без требования аутентификации. Так как я могу это сделать. Так как у меня есть 2 модуля в моем проекте: Frontend и бэкэнд, которые обмениваются сообщениями с остальными. Из бэкэнд я попытался передать массив байтов объекта, но, к сожалению, я получил его как строку, поэтому я не могу работать с ним. Есть ли какое-либо предложение для решения этой проблемы?
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;
}
Предполагая, что ваши интерфейсные и внешние интерфейсы являются обычными, а ваш back-end взаимодействует с Alfresco, все, что вам нужно сделать, это написать прокси-сервер, который находится в вашем back-end.
Прокси-сервер может установить сеанс с Alfresco, используя предварительно настроенную "учетную запись службы", которая имеет доступ к контенту. Таким образом, пользователь, использующий ваш собственный веб-сайт, не использует свои собственные учетные данные для получения объекта от Alfresco. Вместо этого используется служебная учетная запись, и веб-приложение передает ее запрашивающему.
Например, в одном из моих проектов у меня есть AssetService, который использует CMIS, чтобы получить 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();
}
Затем мой контроллер просто просит сервис для актива получить некоторую информацию об этом, чтобы упростить установку некоторых полезных заголовков, затем он получает входной поток из службы активов и возвращает это:
@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 MVC в приложении Spring Boot, но, конечно, вы можете сделать что-то подобное с простым старым сервлетом, если хотите.
Один из вариантов - написать собственный веб-скрипт и настроить его таким образом, чтобы он позволял гостевому доступу.
http://docs.alfresco.com/4.1/concepts/ws-authenticating.html
Также есть возможность полностью отключить проверку разрешений, которую я никогда не пробовал.
https://community.alfresco.com/thread/175381-disabling-permission-checking