Search

30. 스프링부트 포토그램 인증 회원정보수정 시큐리티 태그라이브러리

포토그램 인증 구현하기

회원정보 수정 구현

회원정보 수정화면에서 이제 로그인된 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해서 갖고와야하기 때문.
잘 들어온다~

*참고