2016-06-22 4 views
0

HttpHandler 및 HttpFilter와 당사의 내부 인증 서비스를 사용하여 jsp 페이지에 대한 인증을 구현했습니다. 논리는 다음과 같습니다. HttpRequest를 수신하고 헤더에 사용자가있는 경우 Google 서비스에 해당 사용자의 액세스 역할을 요청하는 요청을 보냅니다. 이 역할을 HttpSession에 특성으로 추가하려고합니다. Jetty-server에서 AbstractHandler를 확장하는 HttpHandler에서이 논리를 구현했습니다. 따라서 역할이 세션 개체에 성공적으로 추가되었습니다. 그런 다음 요청은 필터로 이동합니다. 내 필터에서 세션에서 이러한 값을 얻으려고하지만 운이 없습니다. 나는 모든 곳에서 세션의 String-Hash 값을 확인했지만 핸들러에서는 값을 속성으로 볼 수 있었지만 필터에서는 속성이 전혀 없습니다. 그런 다음 핸들러에서 hashCode()를 확인하고 동일한 해시 세션 값을 가진 경우에도 필터에서 Session 객체에 대해 다른 값을 반환하는지 확인했습니다.HttpSession 속성을 가져올 수 없습니다.

세션 식별자가 같은 이유는 무엇인지 알 수 있지만 객체는 다르며 필터에는 속성 값이 없습니다.

결국
Object attributesObject = httpRequest.getSession().getAttribute(ACCESS_ROLES); 
+0

는 [보안 구성] (http://www.eclipse.org/jetty/documentation/9.2.10.v20150310/에 설명 된대로 부두 보안을 통합하는 것으로 간주 유무 : 마지막으로,이 스키마는 일이되었다 configuration-security-authentication.html)? –

답변

0

, 문제가 발견되었다 :

httpServletRequest.getSession(true).setAttribute(ACCESS_ROLES, StringUtils.join(getEntitlementAuthorities(user), ENTITLEMENT_ROLES_DIVIDER)); 

이것은 내가 필터에 다시 데이터를 얻으려고하는 방법이다 :

이 내가 처리기의 핸들 방식으로 세션에 값을 추가하는 방법입니다 . 프로그래밍 방식으로 부두 서버를 만들고 핸들러를 HandlerCollection에 추가합니다. 먼저 SessionHandler를 추가 한 다음 ServletContextHandler를 추가했습니다. ServletContextHandler는 사용자가 SessionHandler를 설정하지 않으면 자체 SessionHandler를 생성합니다. 그래서 저는 두 개의 SessionHandlers를 가졌습니다. 심지어 목록에서 세션 식별자를 보았습니다. 속성을 공유하지 않은 세션 객체는 서로 다릅니다.

HandlerCollection hc = new HandlerCollection(); 
ServletContextHandler contextHandler = buildServletHandler(); 
hc.addHandler(new UserAuthenticationHandler()); 
hc.addHandler(contextHandler); 
hc.addHandler(logHandler); 
SessionHandler sh = new SessionHandler(); 
sh.setHandler(hc); 
server.setHandler(sh); 
관련 문제