#1 Controller..
@Controller
@RequestMapping("/auth")
public class LoginContoller{
@GetMapping("/login")
public String loginForm(LoginInput loginInput){
return "loginForm";
}
@PostMapping("/login")
public String login(LoginInput loginInput, HttpSession session){
...
UserInfo ui = new UserInfo("Gil-dong");
session.setAttribute("userInfo",ui);
...
return "...";
}
@GetMapping("/logout")
public String logout(HttpSession session){
UserInfo ui = (UserInfo)session.getAttribute("userInfo");
session.invalidate();
return "...";
}
}
@Getter @Setter
public class UserInfo{
private String name;
public UserInfo(name){
this.name = name;
}
}
@PostMapping("/login")
public String login(LoginInput loginInput, HttpServletRequest request){
...
HttpSession session = request.getSession();// request 객체에서 session 객체를 가져오기
UserInfo ui = new UserInfo("Gil-dong");
session.setAttribute("userInfo",ui); // request 객체에 session 객체를 다시 넣지 않아도 반영됨
return "...";
}
#2 View..
<th:block th:if="${session.userInfo == null}">
<a href="@{/auth/login}">로그인</a>
</th:block>
<th:block th:if="${session.userInfo != null}">
<p>[[${session.userInfo.name}]] 님, 환영합니다</p>
</th:block>
스프링 타임리프에게는 세션도 일반적인 자바빈즈와 동일한 접근.
자바빈즈와 다른 접근은 메시지(message.properties)
상기 본문에선 사용자 정보를 기준으로 로그인과 로그아웃을 설명했는데,
상품 정보를 기준으로 카트 정보를 세션에 담아서 처리할 수 있다.
// HttpSession 이나 HttpServletRequest 사용없이 세션에 해당 객체를 담아준다
@PostMapping("/login")
public String login(@SessionAttribute ObjectA objA){
...
//objA = (ObjectA)session.getAttribute("objectA");
//objA 가공
//session.setAttribute("objectA",objA);
...
return "...";
}
// method 파라미터에 objectA 가 기술되면, 이를 Model 에 넣고 session 에 담아준다
@Controller
@SessionAttributes("objectA")
@RequestMapping("...")
public class TestController{
...
}
public String loginForm(LoginInput loginInput, @CookieValue(value="name") Cookie nameC){
if(nameC!=null){
loginInput.setName(nameC.getValue());
}
}
@PostMapping("...")
public String login(LoginInput loginInput, HttpSession session, HttpServletResponse response){
Cookie nameC = new Cookie("name", loginInput.getName());
nameC.setPath("/");
nameC.setmaxAge(초단위); // 30일 = 30 * 24시간 * 60분 * 60초
response.addCookie(nameC);
return "...";
}
'Server Oriented > Spring' 카테고리의 다른 글
JUnit5 JPA DB 테이블 1개 목록/상세/등록/수정/삭제 (0) | 2022.12.05 |
---|---|
스프링 JPA, 평범한 게시판 구현 DB 테이블 1개 (2) | 2022.12.03 |
스프링 뷰, 타임리프 form 과 결과 (0) | 2022.10.14 |
스프링 build.gradle 수정후 반드시 실행 (0) | 2022.10.13 |
스프링 Controller Step 2, request 파라미터 수용(매핑시) (0) | 2022.09.30 |