콘트롤러에서 다른 컨트롤러로 포스트 이동 post move in controller without session(RedirectAttributes)
프로그램 자료/Java & Spring 2020. 3. 3. 14:20현재 개발환경에서는 세션을 사용하지 않고 있다.
헌데 현재 컨트롤러에서 다른 컨트롤러로 post로 이동한 효과를 주어야 할 필요가 생겼다.
찾아보니 RedirectAttributes 같은 클래스가 있던데 내부적으로 session 객체를 사용한단다.
실제로 테스트 코르를 작성하니 JSESSION 쿠키가 생성되더라.
그래서 만들게 되었다.
위 이전 포스트는 asp.net 용.
import java.io.IOException;
import java.text.MessageFormat;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class RemotePost {
private HttpServletRequest request;
private HttpServletResponse response;
private String url;
private String method;
private String formName;
private Map<String, String> param;
private static String htmlForm;
private static String inputForm;
static {
inputForm = "<input name=\"{0}\" type=\"hidden\" value=\"{1}\">";
StringBuffer tags = new StringBuffer();
tags.append("<html><head></head>");
tags.append("<body onload=\"document.{0}.submit()\">");
tags.append("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >");
tags.append("{3}");
tags.append("</form>");
tags.append("</body></html>");
htmlForm = tags.toString();
}
public void Flush() throws IOException {
StringBuffer input = new StringBuffer();
for (Map.Entry<String, String> data : param.entrySet()) {
input.append(MessageFormat.format(inputForm, data.getKey(), data.getValue()));
}
String html = MessageFormat.format(htmlForm, formName, method, url, input.toString());
response.reset();
response.getWriter().write(html);
response.flushBuffer();
}
}
// 사용방법 (return을 사용하지 않으면 해당 메소드 밑에 있는 소스도 동작함)
RemotePost post = RemotePost.builder().request(request).response(response)
.url("/auth/otp").method("POST").formName("otpForm").param(param).build();
post.Flush();
return;