일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SQL튜닝
- 객체지향
- 함수
- StringBuffer
- 오버라이딩
- 논리 연산자
- 식별자
- 비교 연산자
- 스프링시큐리티 로그아웃
- 자바의정석
- java
- spring 게시판 삭제
- 배열
- 연산자
- 인텔리제이 Web 애플리케이션
- 산술 연산자
- 상속
- SQL
- 친절한 SQL
- 친절한 SQL 튜닝
- 반복문
- 이클립스 설치
- 객체
- @PreAuthorize("isAuthenticated()")
- join
- SQL 튜닝
- SpringSecurity 로그아웃
- 오버로딩
- SpringSecurity 로그인
- 예약어
Archives
- Today
- Total
gi_dor
시큐리티로 로그인한 회원 정보 조회 , 수정 - SpringSecurity, MySQL , MyBatis 본문
Back_End/SpringBoot
시큐리티로 로그인한 회원 정보 조회 , 수정 - SpringSecurity, MySQL , MyBatis
기돌 2024. 4. 17. 16:38사용자 정보 조회
VO
@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Long no;
private String id;
private String password;
private String name;
private String email;
private LocalDateTime createdDate;
private LocalDateTime updatedDate;
private String tel;
private String zipCode;
private String address;
private String addressDetail;
private String delYn;
public String getFullAddress() {
return String.format("%s %s %s", zipCode,address,addressDetail);
}
}
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.bookhub.user.mapper.UserMapper">
<resultMap id="UserResultMap" type="com.example.bookhub.user.vo.User">
<id column="user_no" property="no" />
<result column="user_id" property="id" />
<result column="user_password" property="password" />
<result column="user_name" property="name" />
<result column="user_email" property="email" />
<result column="user_created_date" property="createdDate" />
<result column="user_updated_date" property="updatedDate" />
<result column="user_tel" property="tel" />
<result column="user_zip_code" property="zipCode" />
<result column="user_address" property="address" />
<result column="user_address_detail" property="addressDetail" />
<result column="user_del_yn" property="delYn" />
</resultMap>
<!-- 사용자 정보조회 -->
<select id="selectUserById" parameterType="string" resultMap="UserResultMap">
SELECT user_no ,
user_id ,
user_password ,
user_name ,
user_email ,
user_tel ,
user_zip_code ,
user_address,
user_address_detail ,
user_created_date ,
user_updated_date,
user_del_yn
FROM USER
WHERE user_id = #{id}
and user_del_yn = 'N'
</select>
<!-- 회원 정보 변경 -->
<update id="updateUser" parameterType="com.example.bookhub.user.vo.User">
update USER
set
user_email = #{email},
user_tel = #{tel},
user_zip_code = #{zipCode},
user_address = #{address},
user_address_detail = #{addressDetail}
WHERE user_id = #{id}
</update>
</mapper>
Mapper
@Mapper
public interface UserMapper {
User selectUserById(String id);
void updateUser(User user);
}
Service
@Service
@RequiredArgsConstructor
public class UserService implements UserDetailsService {
private final UserMapper userMapper;
private final PasswordEncoder passwordEncoder;
/**
* 주어진 아이디에 해당하는 사용자를 데이터베이스에서 찾는다
* @param id 사용자 아이디
* @return 선택된 사용자
* @throws RuntimeException 주어진 아이디에 해당하는 사용자를 찾을 수 없는 경우 발생
*/
public User selectUserById(String id) {
System.out.println(id);
User user = userMapper.selectUserById(id);
if (user == null) {
throw new RuntimeException("해당 아이디에 해당하는 사용자를 찾을 수 없습니다: " + id);
}
return user;
}
/**
* 사용자 정보를 수정하는 메서드
* @param user 수정할 사용자 정보를 담은 User 객체
* @return 업데이트 (수정)된 사용자 정보를 담은 User 객체
*/
public User modifyUserInfo(User user) {
userMapper.updateUser(user);
return user;
}
}
Controller
@Slf4j
@Controller
@RequiredArgsConstructor
@RequestMapping("/user")
public class UserController {
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
private final UserService userService;
/**
* 현재 로그인한 사용자의 회원 정보를 조회하는 메서드
*
* @param model View에 전달할 데이터를 담는 Model 객체
* @param principal 현재 로그인한 사용자의 Principal 객체
* @return 회원 정보 페이지의 뷰.html 이름
*/
// 로그인 - 마이페이지 - 회원정보 조회
@PreAuthorize("isAuthenticated()")
@GetMapping("/mypage/userInfo")
public String userInfo(Model model , Principal principal) {
String userId = principal.getName();
User user = userService.selectUserById(userId);
model.addAttribute("user" , user);
return "user/userInfo";
}
/**
* 회원 정보 수정 페이지를 제공하는 메서드.
*
* @param model View에 전달할 데이터를 담는 Model 객체
* @param principal 현재 로그인한 사용자의 Principal 객체
* @return 회원 정보 수정 페이지의 뷰.html 이름
*/
@PreAuthorize("isAuthenticated()")
@GetMapping("/mypage/modifyUserInfoForm")
public String modifyForm(Model model , Principal principal) {
log.info("유저 아이디 log: " +principal.getName());
System.out.println("유저 아이디 sop : " +principal.getName());
// 현재 로그인한 사용자의 ID
String userId = principal.getName();
User user = userService.selectUserById(userId);
// 회원 정보를 입력칸에 채워넣기
model.addAttribute("user",user);
return "user/modifyUserInfo";
}
/**
* 사용자 정보를 수정하는 POST 요청을 처리하는 메서드
*
* @param principal 현재 로그인한 사용자의 Principal 객체
* @param user 수정된 사용자 정보를 포함하는 User 객체
* @return 사용자 정보 수정 후 사용자 정보 페이지로 리다이렉트하는 URL주소
*/
@PreAuthorize("isAuthenticated()")
@PostMapping("/mypage/modifyUserInfo")
public String modifyUser(Principal principal , User user){
String id = principal.getName();
User userId = userService.selectUserById(id);
userId.setTel(user.getTel());
userId.setEmail(user.getEmail());
userId.setZipCode(user.getZipCode());
userId.setAddress(user.getAddress());
userId.setAddressDetail(user.getAddressDetail());
userService.modifyUserInfo(user);
return "redirect:/user/mypage/userInfo";
}
🔒 error
사용자 정보 조회 후 정보 수정이 되지 않습니다
preparing :
update User
set
user_email = ? ,
user_tel = ? ,
user_zip_code=? ,
user_address = ?,
user_address_detail = ?
where user_id = ?
parameters : null , null , 08081(String) , null , null
Updates: 0
로그를 확인하면 이렇게 나와있습니다
null 값이 들어갔는데 , user_zip_code 만 String 타입으로 08081의 값이 들어간것을 확인했씁니다
📌 원인
네트워크 - 페이로드를 보면 데이터가 no , delYn , zipCode 3종류만 존재 하는것을 확인할수 있습니다
<input type="text" class="form-control" th:value="${user.tel}" />
<input type="text" class="form-control" th:value="${user.email}" />
<input type="text" id="sample6_postcode" class="form-control" th:name="zipCode" th:value="${user.zipCode}">
<input type="text" id="sample6_address" th:value="${user.address}" placeholder="주소" class="form-control mb-1" >
<input type="text" id="sample6_detailAddress" th:value="${user.addressDetail}" placeholder="상세주소" class="form-control">
zipCode 에만 th:name="zipCode"
name 이 존재하고 있습니다
<input type="text" id="sample6_postcode" class="form-control" th:name="zipCode" th:value="${user.zipCode}">
💡 해결 방법
<input type="text" class="form-control" th:name="tel" th:value="${user.tel}" />
<input type="text" class="form-control" th:name="email" th:value="${user.email}" />
<input type="text" id="sample6_postcode" class="form-control" th:name="zipCode" th:value="${user.zipCode}">
<input type="text" id="sample6_address" th:name="address" th:value="${user.address}" placeholder="주소" class="form-control mb-1" >
<input type="text" id="sample6_detailAddress" th:name="addressDetail" th:value="${user.addressDetail}" placeholder="상세주소" class="form-control">
Preparing:
update USER
set
user_email = ?,
user_tel = ?,
user_zip_code = ?,
user_address = ?,
user_address_detail = ?
WHERE user_id = ?
Parameters: rltjs9694@gmail.com(String),
010-1234-5678(String),
12275(String),
경기 남양주시 와부읍 덕소로 270(String),
홈홈 마이홈 스윗홈(String),
rltjs987(String)
Updates: 1
728x90
'Back_End > SpringBoot' 카테고리의 다른 글
회원탈퇴 - SpringSecurity, MySQL , MyBatis (0) | 2024.04.22 |
---|---|
마이페이지 ver.1- SpringSecurity, MySQL , MyBatis @PreAuthorize("isAuthenticated()") (0) | 2024.04.22 |
로그아웃 - SpringSecurity, MySQL , MyBatis (0) | 2024.04.17 |
로그인 SpringSecurity, MySQL , MyBatis (0) | 2024.04.15 |
회원가입 - SpringSecurity , @Valid , MySQL , MyBatis (0) | 2024.04.12 |