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

В настоящее время я разрабатываю приложение java/jee, используя alfresco как ged и spring в качестве фреймворка. Я хочу отобразить файл в навигаторе без требования аутентификации. Итак, как я могу это сделать. Кстати, у меня есть 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;
    }

person fbm fatma    schedule 31.05.2017    source источник
comment
Насколько я знаю, вы можете показывать только PDF-документ, и вы будете работать, используя InputStream   -  person Yagami Light    schedule 01.06.2017


Ответы (2)


Предполагая, что ваш интерфейс и сервер настроены, а ваш сервер взаимодействует с Alfresco, все, что вам нужно сделать, это написать прокси, который находится в вашем сервере.

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

person Jeff Potts    schedule 09.06.2017
comment
Когда вы создаете документ в alfresco, можно ли получить его без аутентификации, значит ли это, что каждый может получить доступ к документу?!? - person Yagami Light; 22.06.2017
comment
Нет, его невозможно получить без аутентификации, если только вы не сделаете что-то вроде того, что я предложил выше, что по существу помещает прокси перед Alfresco и извлекает документ от имени пользователя. Если бы человек мог угадать ссылку на узел, он смог бы получить любой документ в репозитории, к которому имеет доступ учетная запись службы. - person Jeff Potts; 24.06.2017
comment
Спасибо @jeffPotts за ваш ответ и ваше время - person Yagami Light; 24.06.2017

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

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

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

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

person Lista    schedule 02.06.2017