2012-06-07 1 views
1

슬링의 userManager REST 인터페이스를 사용하여 애플리케이션의 관리 UI를 작성하려고하지만 json 렌더링을 사용자 정의하고 싶습니다. 예를 들어 요청자가 구성원 인 경우에만 "Get group"의 응답에 구성원을 포함 시키려고합니다.슬링의 userManager에 대한 json 렌더링 사용자 정의

libs/sling/group/json.esp를 추가하여 시작했지만 기본 응답을 유지하고 사용자 정의하는 방법을 알지 못합니다. json을 쿼리하고 양식을 작성해야만해도 JCR/슬링에서이 데이터를 가져올 수있는 API에 대한 정보는 어디에서 찾을 수 있습니까?

ResourceTraversor를 사용하여 json 형식으로 리소스 객체를 덤프 할 수 있지만 새로운 Packages.org.apache.sling.servlets.get.impl.helpers.ResourceTraversor (-1, 10000, resource, true)를 사용하여 찾을 수 있음 esp가 오류를 발생시킵니다.

답변

2

여기에 몇 가지 유의 사항이 있습니다.

먼저 코드를 libs 디렉토리에 두지 마십시오. 앱 코드는 apps 디렉토리 아래에 있어야합니다. 서블릿에서 URI를 확인하려고 시도 할 때 슬링은 libs을 확인하기 전에 apps을 확인하므로 슬링과 함께 제공되는 기능을 완전히 무시하려면 apps에 코드를 넣어야합니다.

둘째로 http://localhost:8080/system/userManager/group/administrators.tidy.1.json을 요청할 때 슬링의 기본 GET 서블릿이 해당 스크립트 나 서블릿을 찾지 못했기 때문에 (아마도 상황 설정에 따라) 어떤 일이 발생하는지 알 수 있습니다. 연구 목적으로 기본 get servlet 코드 인 org.apache.sling.servlets.get.impl.DefaultGetServlet을보고 JSON을 렌더링하는 데 사용하는 코드를 살펴볼 가치가 있습니다. 기본 GET 서블릿이 수행하는 것과 다른 방식으로 사용자 그룹의 렌더링을 처리해야하는 경우 sling/group 유형의 자원에 대한 요청을 수신하는 서블릿을 작성해야합니다. 이를 위해 서블릿을 생성하고 OSGI에 등록하는 것이 이상적입니다. http://sling.apache.org/site/servlets.html은 서블릿 확인자가 서블릿을 찾도록 설정해야하는 다양한 등록 정보를 제공합니다. 그런 다음 서블릿이 요청을 처리하므로 요청 된 자원에 직접적이고 쉽게 액세스 할 수 있습니다.

세 번째로 요청한 사용자가 요청한 그룹의 구성원이 아닌 경우 그룹 구성원이 렌더링하지 못하게해야한다는 점이 특히 중요합니다. 이는 렌더링 문제보다 액세스 제어 문제에 더 가깝습니다. Sling과 Jackrabbit은 응용 프로그램을 설치하는 방법에 대해 가능한 한 거의 가정을하지 않습니다. 그렇다면 특정 사용 사례에 적용 할 수있는 액세스 제어를 설정해야합니다. Jackrabbit 위키 (http://wiki.apache.org/jackrabbit/AccessControl)의 Access Control에 관한 위키 포스트는 어느 정도까지이 글에 들어가 있습니다.

+0

스크립트도 작동한다는 점에 유의하십시오 (스크립트와 서블릿은 슬링에서 동등 함). 실험에 더 편리 할 수 ​​있습니다. apps/sling/group/json.esp에 스크립트를 추가하는 경우 그룹을 /system/userManager/group/nGroupA.json으로 요청하면이 스크립트가 사용됩니다. 예를 들어 custom.json.esp라는 이름을 지정하여 스크립트를 선택기에 연결할 수 있으며 그룹이/system/userManager/group/newGroupA로 요청 된 경우에만 활성화됩니다. .custom.json –

0

Paul Michelotti의 답변에서 나온 지침을 사용하여 더 자세히 조사한 결과 적절한 해결책을 찾았습니다.

슬링은 상기 서블릿에 의해 처리되기 전에 모든 요청 필터까지 전달

@SlingFilter(scope = SlingFilterScope.REQUEST, order = Integer.MIN_VALUE) 

아래와 같이 SCR 주석 통해 요청 필터 (javax.servlet.Filter)를 수용한다. resourceType을 사용하여 group.1.json 및 group/mygroup.1.json에 대한 요청을 구별 할 수있었습니다. 필터도 현재 사용자에게 액세스 할 수 있기 때문에 내 보안 모델을 준수하지 않고 404 상태 코드를 반환하지 않으면 요청을 거부 할 수있었습니다.

필터에 대한 자세한 내용은 this page을 참조하십시오. 또한 사용법에 대한 지침은 샘플 프로젝트 urlfilter을 참조하십시오.

관련 문제