포토그램 인증 구현하기
회원정보 수정 구현
회원정보 수정화면에서 이제 로그인된 ssar에 대한 세션정보로 보여지게 하면된다.
(지금은 예시로 하드코딩되어서 박힌 데이터를 보여주는 상태이다)
update.jsp 에 세션정보를 보내주면된다.
UserController.java 에 Model를 추가해서 유저 오브젝트를 담아서 보내주자.
@GetMapping("/user/{id}/update")
public String update(@PathVariable String id, @AuthenticationPrincipal PrincipalDetails principalDetails, Model model) {
//1. 추천
System.out.println("세션 정보 :" +principalDetails.getUser());
//2. 복잡(비추천)
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
PrincipalDetails mPrincipalDetails = (PrincipalDetails)auth.getPrincipal();
System.out.println("직접 찾은 세션 정보 :" +mPrincipalDetails.getUser());
model.addAttribute("principal", principalDetails.getUser());
return "user/update";
}
Java
복사
update.jsp에서
<!--프로필셋팅 아이디영역-->
<div class="content-item__01">
<div class="item__img">
<img src="#" onerror="this.src='/images/person.jpeg'" />
</div>
<div class="item__username">
<h2>${principal.username }</h2>
</div>
</div>
<!--프로필셋팅 아이디영역end-->
Java
복사
이렇게 바꿔주면 된다.
${}는 jsp의 EL표현식이다. 객체 프로퍼티 값을 꺼낼 때 사용.
나머지 하드코딩된 부분도 변경해주면 된다.
<div class="content-item__02">
<div class="item__title">이름</div>
<div class="item__input">
<input type="text" name="name" placeholder="이름"
value="${principal.name }" />
</div>
</div>
<div class="content-item__03">
<div class="item__title">유저네임</div>
<div class="item__input">
<input type="text" name="username" placeholder="유저네임"
value="${principal.username }" readonly="readonly" />
</div>
</div>
<div class="content-item__04">
<div class="item__title">패스워드</div>
<div class="item__input">
<input type="password" name="password" placeholder="패스워드" />
</div>
</div>
<div class="content-item__05">
<div class="item__title">웹사이트</div>
<div class="item__input">
<input type="text" name="website" placeholder="웹 사이트"
value="${principal.website}" />
</div>
</div>
<div class="content-item__06">
<div class="item__title">소개</div>
<div class="item__input">
<textarea name="bio" id="" rows="3">${principal.bio}</textarea>
</div>
</div>
<div class="content-item__07">
<div class="item__title"></div>
<div class="item__input">
<span><b>개인정보</b></span> <span>비즈니스나 반려동물 등에 사용된 계정인 경우에도
회원님의 개인 정보를 입력하세요. 공개 프로필에는 포함되지 않습니다.</span>
</div>
</div>
<div class="content-item__08">
<div class="item__title">이메일</div>
<div class="item__input">
<input type="text" name="email" placeholder="이메일"
value="${principal.email }" readonly="readonly" />
</div>
</div>
<div class="content-item__09">
<div class="item__title">전회번호</div>
<div class="item__input">
<input type="text" name="tel" placeholder="전화번호"
value="${principal.phone}" />
</div>
</div>
<div class="content-item__10">
<div class="item__title">성별</div>
<div class="item__input">
<input type="text" name="gender" value="${principal.gender}" />
</div>
</div>
Java
복사
데이터가 잘 들어갔다.
다시 pom.xml에 라이브러리로 가서 보면
<!-- 시큐리티 태그 라이브러리 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
</dependency>
Java
복사
jsp일때 사용하기 좋은 라이브러리를 추가한게 있다.
header.jsp가 모든 jsp 상단 위에 include 되어있는데
그래서 header에만 정의 해주면 된다
html태그 위에
<sec:authorize access="isAuthenticated()">
</sec:authorize>
Java
복사
isAuthenticated 라고 인증된 정보에 접근하는 방법(세션에 접근하는 방법) 이라고 생각하면 된다.
<sec:authorize access="isAuthenticated()">
<sec:authentication property="principal" var ="principal"/>
</sec:authorize>
Java
복사
property에 principal를 적으면 principal에 대한 세션에 접근이 된다.
그리고 세션을 principal 변수에 세션을 담는다
이렇게 설정해주면 굳이 UserController에 Model를 추가안해줘도 된다.
@GetMapping("/user/{id}/update")
public String update(@PathVariable String id, @AuthenticationPrincipal PrincipalDetails principalDetails) {
//1. 추천
System.out.println("세션 정보 :" +principalDetails.getUser());
//2. 복잡(비추천)
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
PrincipalDetails mPrincipalDetails = (PrincipalDetails)auth.getPrincipal();
System.out.println("직접 찾은 세션 정보 :" +mPrincipalDetails.getUser());
return "user/update";
}
Java
복사
이렇게 다시 Model 부분 빼주고
update.jsp에
${principal.username }
Java
복사
이렇게 줬던 부분들을
${principal.user.username }
Java
복사
user만 추가해줘서 넣어주면 된다.
추가해주는 이유는
principal이 현재 principalDetails까지니까 .user하면 getUser해서 갖고와야하기 때문.
잘 들어온다~