티스토리 뷰
[로그인 상태에 따른 메뉴처리]
로그인 폼에서 유저 아이디와 비밀번호를 Post 방식으로 전송하여 Controller에서 받았다
[Controller]
@PostMapping("/login")
public String login(String userId, String password, HttpSession session){
User user=userRepository.findByUserId(userId);
if(user == null){
System.out.println("Login fail");
return "redirect:/users/loginForm";
}
if(!user.matchPassword(password)){
System.out.println("Login fail");
return "redirect:/users/loginForm";
}
System.out.println("Login Success");
session.setAttribute(HttpSessionUtils.USER_SESSION_KEY, user);
return "redirect:/";
}
- 유저 존재여부 확인 : userRepository에 해당 유저아이디의 객체가 있는지 확인하고 없다면 로그인 폼으로 redirect 한다.
- 비밀번호 일치 여부 확인 : 사용자가 입력한 비밀번호와 유저 객체의 비밀번호가 일치한지 확인하는 작업.
- Session 추가 : session.setAttribute() 함수를 사용하여 세션을 추가한다.
[View Page]
<div class="collapse navbar-collapse" id="navbar-collapse2">
<ul class="nav navbar-nav navbar-right">
<li class="active"><a href="../index.html">Posts</a></li>
{{^sessionedUser}}
<li><a href="/users/loginForm" role="button">로그인</a></li>
<li><a href="/users/form" role="button">회원가입</a></li>
{{/sessionedUser}}
{{#sessionedUser}}
<li><a href="/reservations/form" role="button"><b>Make Reserve</b></a></li>
<li><a href="/reservations" role="button"><b>Reservation List</b></a></li>
<li><a href="/users/logout" role="button">로그아웃</a></li>
<li><a href="/users/{{id}}/form" role="button">개인정보수정</a></li>
{{/sessionedUser}}
</ul>
</div>
Mustache 문법에서 처리 방법
- {{^sessionedUser}} {{/sessionedUser}} : sessionedUser가 없다면 이 코드 블록이 보여진다.
- {{#sessionedUser}} {{/sessionedUser}} : sessionedUser가 있다면 이 코드 블록이 보여진다
Mustache 문법 참고
Inverted Sections
An inverted section begins with a caret (hat) and ends with a slash. That is {{^person}}
begins a "person" inverted section while {{/person}}
ends it.
While sections can be used to render text one or more times based on the value of the key, inverted sections may render text once based on the inverse value of the key. That is, they will be rendered if the key doesn't exist, is false, or is an empty list.
Template:
{{#repo}}
<b>{{name}}</b>
{{/repo}}
{{^repo}}
No repos :(
{{/repo}}
Hash:
{
"repo": []
}
Output:
No repos :(
[로그인 전 메뉴]
[로그인 후 메뉴]
[로그아웃]
@GetMapping("/logout")
public String logout(HttpSession session){
//session.invalidate();
/*session에 해당하는 이름을 매개변수로 넣어줘야 한다*/
session.removeAttribute(HttpSessionUtils.USER_SESSION_KEY);
return "redirect:/";
}
- session.removeAttribute(세션 이름) : 세션 이름에 해당하는 세션만 삭제한다.
- session.invalidate() : 내가 기존에 사용한 방법이다. 하지만 invalidate()의 단점은 모든 세션을 무효화 시킨다는 점에 있다. 특정 세션만 종료 시키고 싶다면 removeAttribute()를 사용해야 한다.
'Back-end' 카테고리의 다른 글
[Spring Boot]원격 서버에 배포하기 (0) | 2018.09.20 |
---|---|
[SpringBoot] 코드 리팩토링 (0) | 2018.09.18 |
[SpringBoot] 자기 자신에 한해 개인정보 수정 (0) | 2018.09.18 |
Restful API, 어노테이션 관련 알아볼 것들 (0) | 2018.09.15 |
Spring Boot 로컬 개발환경 세팅 (0) | 2018.09.11 |
- Total
- Today
- Yesterday
- 항해플러스백엔드
- 내년은 빡세게!!
- resize
- 도커
- 폭포수
- 관계대수
- 유즈케이스
- 월부닷컴
- Inception
- Use case
- 깃허브
- 열반스쿨기초반
- docker
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- 항해솔직후기
- 재테크공부
- 파라메터
- pop_back
- Spring boot
- push_back
- 개발자 회고
- GIT
- 2023년
- 월급쟁이부자들
- 부동산공부
- front
- 깃
- github
- 항해플러스후기
- 인셉션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |