2024-01-31(38일차) - Spring

민짱·2024년 1월 31일

📅2024. 01. 31 38일차


🎬2024_01_Spring_AM

로그인 구현

💡띵킹 타임💡

  • doJoin을 가져와서 변형시키자! parameter로 loginId와 loginPw을 받아서 해당하는 데이터를 Selete시켜서 경우의 수 2개로 나눠서 loginId가 없을 때랑 loginId에 해당하는 loginPw와 맞지 않을 때 return시키고 둘 다 맞으면 로그인 되게 하면 되지않을까????
@Autowired
	private MemberService memberService;

	@RequestMapping("/usr/member/doLogin")
	@ResponseBody
	public ResultData<Member> doLogin(String loginId, String loginPw) {

		if (Ut.isNullOrEmpty(loginId)) {
			return ResultData.from("F-1", "아이디를 입력해주세요");
		}
		if (Ut.isNullOrEmpty(loginPw)) {
			return ResultData.from("F-2", "비밀번호를 입력해주세요");
		}

		Member member = memberService.getMemberByLoginId(loginId);

		if (member == null) {
			return ResultData.from("F-3", Ut.f("%s(은)는 존재하지 않는 아이디입니다", loginId));
		}

		if (member.getLoginPw().equals(loginPw) == false) {
			return ResultData.from("F-4", Ut.f("비밀번호가 일치하지 않습니다"));
		}

		httpSession.setAttribute("loginedMemberId", member.getId());

		return ResultData.from("S-1", Ut.f("%s님 환영합니다", member.getNickname()));
	}

중복 로그인

문제) 로그인이 되 있는 상태에도 중복 로그인이 된다

  • HttpSesstion이용하여 값 저장
@Autowired
	private MemberService memberService;

	@RequestMapping("/usr/member/doLogin")
	@ResponseBody
	public ResultData<Member> doLogin(HttpSession httpSession, String loginId, String loginPw) {

		boolean isLogined = false;

		if (httpSession.getAttribute("loginedMemberId") != null) {
			isLogined = true;
		}

		if (isLogined) {
			return ResultData.from("F-A", "이미 로그인 상태입니다");
		}

		if (Ut.isNullOrEmpty(loginId)) {
			return ResultData.from("F-1", "아이디를 입력해주세요");
		}
		if (Ut.isNullOrEmpty(loginPw)) {
			return ResultData.from("F-2", "비밀번호를 입력해주세요");
		}

		Member member = memberService.getMemberByLoginId(loginId);

		if (member == null) {
			return ResultData.from("F-3", Ut.f("%s(은)는 존재하지 않는 아이디입니다", loginId));
		}

		if (member.getLoginPw().equals(loginPw) == false) {
			return ResultData.from("F-4", Ut.f("비밀번호가 일치하지 않습니다"));
		}

		httpSession.setAttribute("loginedMemberId", member.getId());

		return ResultData.from("S-1", Ut.f("%s님 환영합니다", member.getNickname()));
	}

로그아웃 구현

💡띵킹 타임💡

  • 로그인 할 때 sesstion에 저장한 값을 가져와 remove시키면 되지 않을까??
@RequestMapping("/usr/member/doLogout")
	@ResponseBody
	public ResultData doLogout(HttpSession httpSession) {

		boolean isLogined = false;

		if (httpSession.getAttribute("loginedMemberId") != null) {
			isLogined = true;
		}

		if (isLogined == false) {
			return ResultData.from("F-A", "이미 로그아웃 상태입니다");
		}

		httpSession.removeAttribute("loginedMemberId");

		return ResultData.from("S-1", Ut.f("로그아웃 되었습니다"));
	}

권한체크 > 수정 삭제

💡띵킹 타임💡

  • 수정, 삭제가 자신의 게시글이 아닌데도 수정, 삭제된다. 이건 큰 문제점 어떻게 해결할까?? 우린 로그인 정보를 sesstion에 담았고 게시글 작성할 때 memberId를 저장했다. 그럼 sesstion에서 loginId 가져오고 게시글 작성 시 저장했던 memberId와 비교해서 맞으면 수정, 삭제 가능하게 하고, 틀리면 return하면 될 듯???

  • 권한 체크를 어디 시점에서 할까?? 글이 존재하지 않습니다. 앞에??? 아님 뒤에?? 애초에 게시글이 존재하지 않으면 물어볼 필요도 없지 않을까?? 비교대상이 없기 때문에 그럼 게시글 존재 여부 뒤에 붙여야겠다.

@RequestMapping("/usr/article/doModify")
	@ResponseBody
	public ResultData<Integer> doModify(HttpSession httpSession, int id, String title, String body) {

		boolean isLogined = false;
		int loginedMemberId = 0;

		if (httpSession.getAttribute("loginedMemberId") != null) {
			isLogined = true;
			loginedMemberId = (int) httpSession.getAttribute("loginedMemberId");
		}

		if (isLogined == false) {
			return ResultData.from("F-A", "로그인 후 이용해주세요");
		}

		Article article = articleService.getArticle(id);

		if (article == null) {
			return ResultData.from("F-1", Ut.f("%d번 글은 존재하지 않습니다", id), id);
		}

		if (article.getMemberId() != loginedMemberId) {
			return ResultData.from("F-2", Ut.f("%d번 글에 대한 권한이 없습니다", id), id);
		}

		articleService.modifyArticle(id, title, body);

		return ResultData.from("S-1", Ut.f("%d번 글을 수정했습니다", id), id);
	}

@RequestMapping("/usr/article/doDelete")
	@ResponseBody
	public ResultData<Integer> doDelete(HttpSession httpSession, int id) {

		boolean isLogined = false;
		int loginedMemberId = 0;

		if (httpSession.getAttribute("loginedMemberId") != null) {
			isLogined = true;
			loginedMemberId = (int) httpSession.getAttribute("loginedMemberId");
		}

		if (isLogined == false) {
			return ResultData.from("F-A", "로그인 후 이용해주세요");
		}
		Article article = articleService.getArticle(id);

		if (article == null) {
			return ResultData.from("F-1", Ut.f("%d번 글은 존재하지 않습니다", id), id);
		}

		if (article.getMemberId() != loginedMemberId) {
			return ResultData.from("F-2", Ut.f("%d번 글에 대한 권한이 없습니다", id), id);
		}

		articleService.deleteArticle(id);

		return ResultData.from("S-1", Ut.f("%d번 글이 삭제 되었습니다", id), id);
	}

}

0개의 댓글