외부API 302

-·2021년 3월 19일
0

휴대폰 본인인증 솔루션을 이용하는데 모바일에서 한번씩 302로 응답이 와서 계속 팅김..

그래서 처음에는 302라는걸 중심으로 찾아봄

302라는건 웹서버에서 redirection해주는거다.

해서 멘붕.. 잘알지도 못하고 권한도 없는데 서버를 어케 만지냐..

그래서 구글링하다가

response헤더에 setcookie에 jsessionid값이 있고, request헤더에는 없어서 세션값이 바껴서 팅기는거다.

완전 나랑 똑같은 현상이라서 따라해봄.

tomcat context.xml에 설정을 sessionCookiePath="/" 추가

<context ..... sessionCookiePath="/" ..... > </context>

안됨..

주위분들에게 물어보니 302보다는 보내기전을 봐야될꺼같다면서 알려줌

2020년 2월 4일 구글 크롬이 80버전으로 업데이트 되면서 새로운 쿠키정책이 적용되어 쿠키의 SameSite 속성의 기본값이 "None" -> "Lax"로 변경되었습니다.

변경됨에따라 타도메인간의 통신에서 쿠키값을 잃어버리는 현상이 발생하며, 쿠키값으로 페이지처리하는 사이트의 경우에는 이슈가 생길 수 있습니다.

SameSite속성을 None으로 설정할 경우 Secure속성을 함께 추가해 주셔야 합니다. Secure 속성을 추가된 쿠키는 HTTPS프로토콜에서만 전송이 가능하며 SameSite가 None이어도 Secure 속성이 없으면 None속성이 적용이 되지 않아 쿠키값을 여전히 사용하지 못합니다.

출처: https://bit.ly/2P5FLV1

결론은 쿠키설정을 바꿔줘야된다.

근데 또 이걸못해서 엄청 헤멤. 또 엄청 헤매니까 도와주심 역시 착한분들 ㅠ

response.setHeader("Set-Cookie", "JSESSIONID=" + request.getRequestedSessionId() + "; path=/; Secure; SameSite=None; HttpOnly=HttpOnly");

원하는곳에서 적용시켜주면됨.

해줄곳이 한군데가 아니다 너무많다. 그러면 이런식으로 만들어서 interceptor, filter이런곳에 적용시켜주면된다.

private void addSameSite(HttpServletResponse response, String sameSite) { 
    Collection<String> headers = response.getHeaders(HttpHeaders.SET_COOKIE); 
    boolean firstHeader = true; for(String header : headers) { 
        if(firstHeader) { 
            response.setHeader(HttpHeaders.SET_COOKIE, String.format("%s; Secure; %s", header, "SameSite=" + sameSite)); firstHeader = false; continue; 
        } 
        response.addHeader(HttpHeaders.SET_COOKIE, String.format("%s; Secure; %s", header, "SameSite=" + 	sameSite)); 
    }

이거갖고 3일은 오만가지 ㅈㄹ 다함....

profile
거북이는 오늘도 걷는다

0개의 댓글