SNS 포토그램 만들기 (회원정보 수정)

송용준·2023년 4월 20일
post-thumbnail

시큐리티 태그라이브러리

컨트롤러에 모델로 보낸 다음에 받아도 되지만

pom.xml안에

<dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-taglibs</artifactId>
</dependency>

넣고 header.jsp에

<sec:authorize access="isAuthenticated()">
	<sec:authentication property="principal" var="principal"/>
</sec:authorize>

넣으면 어디서든 principal을 이용해 세션 정보를 가져올 수 있다.

${principal.user.username}

이런식으로

Ajax 사용하기

업데이트는 자바스크립트 ajax로 만들꺼임

function update(userId) {
	let data = $("#profileUpdate").serialize();
	
	console.log(data);
	
	$.ajax({
		type:"put",
		url:'/api/user/' + userId,
		data:data,
		contentType:"application/x-www-form-urlencoded;charset=utf-8",
		dataType:"json"
	}).done(res=>{
		console.log("썽공");
	}).fail(error=>{
		console.log("실패");
	});
}

보낸 값을 받을 UserApiController, dto를 만들어 준다.

완료

영속화된 정보를 변경하면 더티체킹 후 DB에 자동 반영됨
BCryptPasswordEncoder : 비밀번호 암호화
PrincipalDetails : 시큐리티 세션에 정보 저장

principalDetails.setUser(userEntity);			// 세션 정보 변경
return new CMRespDto<>(1,"회원수정완료",userEntity);

유효성 검사하기

공백이 있을 수 있다는건 불안한 점

값 검증 두가지

  1. 프론트단 막기
<form id="profileUpdate" onsubmit="update(${principal.user.id},event)">

회원정보 변경 화면에서 비밀번호를 넣지않고 넘어갈때 막아주기 위해선
jsp에 onsubmit을 통해 js 함수 실행시켜주고 input태그에 required="required" js에 event.preventDefault(); 로 폼태그 액션 막아주면 완성

  1. 유효성 검사
    JSON.stringify(error.responseJSON.data) : json문자열로 변경
@ExceptionHandler(CustomValidationApiException.class)
	public ResponseEntity<?>  validationApiException(CustomValidationApiException e) {	// <?> : 알아서 찾아감
		return new ResponseEntity<>( new CMRespDto<>(-1, e.getMessage(), e.getErrorMap()), HttpStatus.BAD_REQUEST);
	}

예외처리하는 곳 따로 만들기

Db 처리 두가지 // 여기 부분 어렵다 다시봐야겠다 ㅠㅠ

profile
용용

0개의 댓글