Показать документ без аутентификации

1

Я в настоящее время разрабатываю приложение 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;
    }
Теги:
opencmis
cmis
alfresco

2 ответа

3

Предполагая, что ваши интерфейсные и внешние интерфейсы являются обычными, а ваш 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, но, конечно, вы можете сделать что-то подобное с простым старым сервлетом, если хотите.

  • 0
    Когда вы создаете документ на открытом воздухе, возможно ли получить его без аутентификации, значит ли это, что каждый может получить доступ к документу?!?
  • 0
    Нет, получить его без аутентификации невозможно, если вы не сделаете что-то похожее на то, что я предлагаю выше, что по сути ставит прокси-сервер перед Alfresco и извлекает документ от имени пользователя. Если бы кто-то мог угадать ссылку на узел, он мог бы получить любой документ в репо, к которому имеет доступ «учетная запись службы».
Показать ещё 1 комментарий
2

Один из вариантов - написать собственный веб-скрипт и настроить его таким образом, чтобы он позволял гостевому доступу.

http://docs.alfresco.com/4.1/concepts/ws-authenticating.html

Также есть возможность полностью отключить проверку разрешений, которую я никогда не пробовал.

https://community.alfresco.com/thread/175381-disabling-permission-checking

Ещё вопросы

Сообщество Overcoder
Наверх
Меню