2011-10-09 3 views
0

서비스 내부의 현재 응답에 액세스 할 수있는 방법이 있습니까? 나는RequestContextHolder의 응답에

내가 현재 요청에 액세스하는 방법을 알고 ...이 만료 된 페이스 북의 쿠키를 삭제해야합니다

RequestContextHolder.currentRequestAttributes().getRequest() 

하지만 응답 없음 부족.

답변

1

서비스는 http를 알지 못합니다. 유틸리티 메소드가있는 Groovy (또는 때때로 자바) 클래스이기 때문에입니다. 하지만 액세스 권한이있는 컨트롤러에서 호출하는 경우가 많으므로 웹 레이어의 요청에서 정보를 추출하여 처리를 위해 서비스 레이어로 전달할 수 있습니다.

+0

글쎄, 나는 다른 모든 것보다 순결을 믿지 않습니다. 여기서 a) 나는 모든 메소드에 http 데이터를 전달해야한다. rvice layer, 심지어 명백하지 않은 곳 일지라도 이것은 필요합니다. 또는 b) FacebookService가 현재 처리 된 요청의 쿠키에 액세스하여 거기에서 모든 데이터를 추출한 다음 실제로는 b)를 선택하십시오. – julkiewicz

+0

이것이 내가 컨트롤러에서 handlerInterceptor로 추상화하는 것을 아주 좋아하는 이유입니다. 비즈니스 로직은 '리소스'를 작성하고 반환하는 것을 처리해야합니다. 통신 레이어가 포워드/리다이렉트를 처리해야하기 때문에 포맷 및 보안 검사조차도 현대 아키텍처에서 제거 될 수 있다고 말하고 싶다. 이것은 또한 외부 서비스 (즉, 프록시, 메시지 대기열)의 공유 책임이 될 수있다. 통신을 추상화하여 IO 흐름 (즉 요청/응답)을 공유하는 다른 아키텍처 서비스와 기능 및 데이터를 더 잘 공유 할 수 있습니다. – Orubel

0

일반적으로 @Burt에 동의하지만 위의 주석에서 언급 한 @julkiewicz와 같은 상황에서 쿠키에 액세스해야하며 모든 정보를 전달하고 싶지 않습니다 (특히 쿠키가있는 경우). 많은 중간 계층에서 필요하지 않음). 내가 찾은 두 가지 옵션 (첫 번째는 청소기입니다,하지만 난 WebUtilsRequestContextHolder 선호, 또는 주위 아마도 다른 방법이 있는지 알고하지 않습니다 다음과 같습니다.

WebUtils.retrieveGrailsWebRequest().request.cookies 

RequestContextHolder.requestAttributes.request.request.request.cookies 

I 왜 그렇게 많은 중첩 된 request 개체가 있는지 모르겠지만 Grails 2.4.2에서이 기능이 작동하는지 확인했습니다.