[SPRING] 봄 : REST 호출 응답에 쿠키 삽입
SPRING봄 : REST 호출 응답에 쿠키 삽입
봄 API를 사용하여 REST API 끝점을 구현하고 있습니다. 쿠키 값을 사용하여 HTTP 응답을 다시 보내려고합니다. 이것은 루비에서해야 할 일과 동등합니다. SINATRA :
response.set_cookie('heroku-nav-data', :value => params['nav-data'], :path => '/')
이것은 지금까지 시도한 것이지만 작동하지 않습니다.
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ResponseEntity<String> single_sign_on(@RequestBody String body_sso) {
String[] tokens = body_sso.split("&");
String nav_data=tokens[3].substring(9);
String id = tokens[2].substring(3);
String time_param = tokens[0].substring(10);
long timestamp= Long.valueOf(time_param).longValue();
String pre_token = id+':'+HEROKU_SSO_SALT+':'+time_param;
String token = DigestUtils.shaHex(pre_token);
long lDateTime = new Date().getTime()/1000;
if (!((token.equals(tokens[4].substring(6))) && ((lDateTime-timestamp)<300)))
{
return new ResponseEntity<String>(HttpStatus.FORBIDDEN);
}
HttpHeaders headers = new HttpHeaders();
headers.add("heroku-nav-data",nav_data);// this didn't work
return new ResponseEntity<String>(id,headers,HttpStatus.OK);
}
어떻게해야합니까? 감사.
해결법
-
==============================
1.원시 Set-Cookie 헤더를 사용하여 쿠키를 설정할 수는 있지만 Servlet API를 사용하는 것이 더 쉽습니다.
원시 Set-Cookie 헤더를 사용하여 쿠키를 설정할 수는 있지만 Servlet API를 사용하는 것이 더 쉽습니다.
컨트롤러 메서드에 HttpServletResponse 매개 변수를 추가하면 Spring이 관련 인스턴스를 전달합니다. addCookie 메소드를 사용합니다.
@RequestMapping(value = "/login", method = RequestMethod.POST) public ResponseEntity<String> singleSignOn(@RequestBody String bodySso, HttpServletResponse response) { response.addCookie(new Cookie("heroku-nav-data", navData)); return new ResponseEntity<String>(id,headers,HttpStatus.OK); }
필요한 경우 쿠키 객체에 매개 변수를 더 추가 할 수도 있습니다.
final Cookie cookie = new Cookie(this.cookieName, principal.getSignedJWT()); cookie.setDomain(this.cookieDomain); cookie.setSecure(this.sendSecureCookie); cookie.setHttpOnly(true); cookie.setMaxAge(maxAge); response.addCookie(cookie);
-
==============================
2.마침내 해결책을 찾았습니다.
마침내 해결책을 찾았습니다.
HttpHeaders headers = new HttpHeaders(); headers.add("Set-Cookie","key="+"value"); ResponseEntity.status(HttpStatus.OK).headers(headers).build();
-
==============================
3.쿠키 용 Spring API를 사용할 수 있습니다 : org.springframework.http.HttpCookie :
쿠키 용 Spring API를 사용할 수 있습니다 : org.springframework.http.HttpCookie :
HttpCookie cookie = ResponseCookie.from("heroku-nav-data", nav_data) .path("/") .build(); return ResponseEntity.ok() .header(HttpHeaders.SET_COOKIE, cookie.toString()) .body(id);
-
==============================
4.Hey 응답 객체에 쿠키를 추가하고 @CookieParam을 사용하여 응답 객체에서 쿠키를 읽는 방법에 대한 예제가 있습니다.
Hey 응답 객체에 쿠키를 추가하고 @CookieParam을 사용하여 응답 객체에서 쿠키를 읽는 방법에 대한 예제가 있습니다.
package com.ft.resources; import javax.ws.rs.CookieParam; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.NewCookie; import javax.ws.rs.core.Response; @Path("/cookie") public class CookieResource { @GET @Path("/write") public Response write() { //create cookie NewCookie c1=new NewCookie("uname","gaurav"); NewCookie c2=new NewCookie("password","gaurav@123"); //adding cookie to response object return Response.ok().cookie(c1,c2).build(); } @GET @Path("/read") public Response read(@CookieParam("uname") String uname,@CookieParam("password") String password) { System.out.println(uname); System.out.println(password); String msg="Username:"+uname; msg=msg.concat("</br>"); msg=msg.concat("Password:"+password); return Response.ok(msg).build(); } }
from https://stackoverflow.com/questions/24642508/spring-inserting-cookies-in-a-rest-call-response by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Eclipse Maven 오류 : 프로젝트의 필수 라이브러리에 대한 아카이브를 읽을 수 없거나 올바른 ZIP 파일이 아닙니다. (0) | 2019.03.28 |
---|---|
[SPRING] 스프링 빈이 CXF 웹 서비스에 주입되지 않는다. 이유는 무엇인가? (0) | 2019.03.28 |
[SPRING] @ NamedNativeQuery - 어떻게 그것을 리포지토리 메서드에 바인딩 할 수 있습니까? (0) | 2019.03.28 |
[SPRING] RestTemplate + 잭슨 (0) | 2019.03.28 |
[SPRING] 스프링 보안 @AuthenticationPrincipal (0) | 2019.03.28 |