2013-03-09 3 views
0

저는 WebSphere Portal Server에 배치 할 여러 포틀릿을 빌드 중이며 각 포틀릿은 자체 WAR에 배치됩니다. 이제 포털에 로그인하는 동안 사용자가 방문하는 모든 포틀릿을 추적해야합니다.포털 애플리케이션의 세션 식별자

HttpServletRequest servletRequest = PortletUtils.getHttpServletRequest(request); 
String sessionId = servletRequest.getSession().getId(); 

을하지만 로그인 한 후, 내가 방문한 모든 포틀릿/WAR에서 다른 sessionId 값을 받고 있어요 :이를 사용하여 포틀릿에서 세션 식별자를 얻으려고 노력했다. WAR 당 하나의 세션 범위가 있기 때문에 그것이 맞는 것 같습니다.

그래서 포털 세션이 아닌 포털 세션의 식별자를 얻으려면 어떻게해야합니까? 나는 모든 HTTP 요청에서 JSESSIONID 쿠키가 동일하다는 것을 알았지 만, 이것이 서블릿 또는 포틀릿 API를 통해 공개되는지 확실하지 않습니다.

+0

포틀릿 요청을 서블릿 요청으로 캐스팅하고 세션 ID를 조사합니다. 이렇게하려면 com.ibm.wps.pe.pc.std.core.PortletUtils 클래스를 wp.pe.rt.api.jar에서 찾으십시오. PortalServer \ app 또는 PortalServer \ base 디렉토리에서이 jar를 찾으십시오. –

답변

1

포털에 로그인하지 않은 사용자에게는 이와 같은 세션이 없습니다. 공개 세션을 사용하도록 설정하면 Portal에서 익명 사용자의 세션 정보를 추적 할 수 있습니다. 속성이 변경하기위한 네비게이터 서비스에서

http://www-10.lotus.com/ldd/portalwiki.nsf/xpDocViewer.xsp?lookupName=IBM+WebSphere+Portal+7+Product+Documentation#action=openDocument&res_title=Portal_configuration_services_wp7&content=pdcontent

봐.

또한이 기능은 테마 또는 포틀릿 필터에서보다 쉽게 ​​수행 될 수 있다고 생각합니다. 이 위치에서 포털 세션에 계속 액세스 할 수 있어야하지만 모든 포틀릿에 코드를 포함 할 필요는 없습니다.

다음은 글로벌 포틀릿 필터를 만드는 링크입니다.

http://wpcertification.blogspot.com/2010/11/applying-global-filter-to-all-portlets.html

UPDATE : 어떤 큰 프레임 워크와 마찬가지로 많은 옵션이있다. 나는 내가 생각할 수있는 것/발견 할 수있는 것을 두뇌 덤프를 제공 할 것이다. 원하는 방법을 실험하고 확인해야 할 수도 있습니다.

JSESSIONID 쿠키는 전체 세션 동안 사용자에게 동일해야합니다. 세션이 만료되면 새로운 JSESSIONID 쿠키가 생성됩니다. 이 기능을 사용하면 단일 세션을 통해 사용자를 추적 할 수 있지만 여러 세션에는 포함되지 않을 수 있습니다.

getUserPrinipal() 또는 getRemoteUser()을 PortletRequest 객체에서 사용하지 않는 것이 좋습니다. 나는 잠시 동안 그 방법을 사용하지 않았기 때문에 어떤 정보가 그들에게서 나오는지보아야 할 것입니다.

request.getAttribute(PortletRequest.USER_INFO)도 있습니다. 반환되는 Map에서 특정 속성을 사용하려면 portlet.xml에서 일부 구성을 수행해야합니다. 예 : here이 있습니다. 현재 프로젝트의 예제와 같이 이름과 성 대신 ibm-primaryEmail을 사용하고 있습니다.

마지막으로 포털에 내장 된 PUMA API를 사용하여 살펴볼 수 있습니다. 코딩에 조금 더 무거워지고 분명히 더 구체적인 컨테이너이지만 사용자와 관련하여 필요한 모든 작업을 수행 할 수 있어야합니다.

+0

로그 된 사용자가 방문한 포틀릿을 추적합니다. 세션 ID가 해당 시나리오에서 작동하지 않는 것 같습니다 (각 WAR는 자체 값을 관리합니다) –

+0

시도 할 수있는 아이디어가 더 많아서 답변을 업데이트했습니다. 그래도 공개 세션을 사용하지 않아야합니다. 그리고 당신이 그것을 필요로하지 않는다면 당신이 정말로 여기에서 당신을 위해 아무것도하지 않을 약간의 오버 헤드를 추가하기 때문에 당신은 정말로 그렇게해서는 안됩니다. –