2013-09-06 1 views
0

우리의 응용 프로그램에서는 쿠키를 사용하여 인증 된 SAML 토큰 및 기타 정보를 설정합니다. 이 방법은 거의 모든 시나리오에서 사용할 수 있습니다.하나의 쿠키에 여러 개의 쿠키 병합

고객이 매우 긴 개인 키와 인증서를 가지고있는 경우 생성 된 SAML 토큰은 쿠키가 처리 할 수있는 크기를 초과하므로 쿠키가 4K 한도를 초과하여 값을 삭제합니다.

쿠키를 여러 쿠키로 나누어 SAML 토큰에 구멍을 뚫고 다른 쿠키에 사용자 정보 등을 저장하는 방법을 생각했습니다. 쿠키를 여러 개 만들면 큰 문제는 아니지만 .

하지만 우리의 응용 프로그램은 특정 이름과 모든 값이 설정된 쿠키를 기대하는 프레임 워크를 사용합니다. 값을 여러 쿠키로 나누려고하면 추가 요청이 실패합니다.

나는 모든 요청을 차단하고 여러 개의 쿠키 값을 하나에 병합하여 예상대로 프레임 워크에 제공하는 필터가 있다고 생각했습니다.

  • 이되는 올바른 접근 방식이
  • 그래서 하나에 쿠키를 병합하고

답변

2

당신은 참으로 장식 할 수있는 프레임 워크는 요청을 계속 처리 할 수 ​​있도록 다시 요청을 설정합니다 거기에 어떤 유틸리티가있는 경우/HttpServletRequest#getCookies()을 원하는 쿠키가있는 배열을 반환하는 사용자 지정 구현으로 래핑하십시오. HttpServletRequestWrapper의 도움으로이 작업을 수행 할 수 있습니다.

기본적으로, 필터에 다음과 같아야합니다 : 긴 값으로 쿠키가 자동적으로 캡처 및 분할 될 수 있도록

chain.doFilter(new HttpServletRequestWrapper(request) { 
    @Override 
    public Cookie[] getCookies() { 
     Cookie[] originalCookies = super.getCookies(); 

     // Loop, check, merge, create new Cookie[]. 
     // ... 

     return newCookies; 
    } 
}, response); 

당신은 심지어 HttpServletResponse#addCookie()에 대해 동일한 작업을 수행 할 수 있습니다. 같은 방법으로 HttpServletResponseWrapper의 도움으로이 작업을 수행 할 수 있습니다.

관련 문제