[Spring Boot 게시판] 7일차

김정현·2022년 10월 4일
0

SPRINGBOOT게시판

목록 보기
6/36

1. usr/article/doDelete, usr/article/doModify 에 ResultData 적용 및 오타수정

	@RequestMapping("usr/article/doModify")
	@ResponseBody
	public ResultData<Article> doModify(int id, String title, String body) {
		Article article = articleService.getArticle(id);

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

		articleService.modifyArticle(id, title, body);
		article = articleService.getArticle(id);
		return ResultData.from("S-1", Ut.f("%d번 게시물을 수정 했습니다.", id), article);
	}
  • ResultData로 결과를 반환 ,
  • 앞에 했던 ResultData적용과 동일한 방식
  • doDelete에도 동일하게 ResultData를 적용

2. usr/member/doJoin ResultData 제네릭 수정

	@RequestMapping("usr/member/doJoin")
	@ResponseBody
	public ResultData<Member> doJoin(String loginId, String loginPw, String name, String nickname, String cellphoneNum,
			String email) {
		if (Ut.empty(loginId)) {
			return ResultData.from("F-1", "아이디를 입력 해주세요.");
		}
					~~~~ 
                        생략 
                        	~~~~
		ResultData<Integer> joinRd = memberService.doJoin(loginId, loginPw, name, nickname, cellphoneNum, email);
		
		if (joinRd.isFail()) {
			return (ResultData)joinRd;
		}
		Member member = memberService.getMemberById(joinRd.getData1());
		return ResultData.newData(joinRd, member);
	}
                                                    
  • (ResultData)joinRd; : joinRd의 타입은 ResultData<Integer> 이기때문에 형변환 필요
  • memberService.getMemberById( (int)joinRd.getData1() ) 에서 joinRd는 ResultData<Integer> 이고
  • data1은 <Integer> 이기 때문에 (int)를 생략가능하다.

3. 로그인 기능 구현(HttpSession)

        @RequestMapping("usr/member/doLogin")
        @ResponseBody
        public ResultData doLogin(HttpSession httpSession, String loginId, String loginPw) {
            if (Ut.empty(loginId)) {
                return ResultData.from("F-3", "이름을 입력 해주세요.");
            }

            if (Ut.empty(loginPw)) {
                return ResultData.from("F-4", "닉네임 입력 해주세요.");
            }

            Member member = memberService.getMemberByLoginId(loginId);
            if(member==null) {
                return ResultData.from("F-1", Ut.f("해당하는 아이디(%s)를 찾을수 없습니다.", loginId));
            }
            if(member.getLoginPw().equals(loginPw)==false) {
                return ResultData.from("F-1", "비밀번호가 일치하지 않습니다.");
            }
            httpSession.setAttribute("loginedMemberId", member.getId());
            httpSession.setAttribute("loginedMemberLoginId", member.getLoginId());
            return ResultData.from("S-1", Ut.f("%님 환영합니다.", member.getName()));		
        }
  • 메소드에서 세션을 주입받는 방식 : 메소드에서 매개변수를 통해 주입받는 방식으로 구현한다면, 선언시에 Servlet Container에게 Session을 달라고 요청
  • 따라서 위의 예제에서는 doLogin 메소드를 호출하는 즉시 Session이 요청/생성
  • httpSession.setAttribute()메소드를 통해 아이디와 비밀번호가 일치한다면 session에 회원의 id와 loginId를 저장

- 세션설명-

4. 로그아웃 기능 구현, 로그인과 로그아웃시 로그인 여부 체크

        @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-1", "로그아웃 상태 입니다.");
            }

            httpSession.removeAttribute("loginedMemberId");
            httpSession.removeAttribute("loginedMemberLoginId");
            return ResultData.from("S-1", "로그아웃 했습니다.");		
        }
  • 로그인시 세션에 loginedMemberId, loginedMemberLoginId가 저장되있다.
  • httpSession.getAttribute("loginedMemberId") == null 이라면 로그인이 되어있지 않은상태
  • httpSession.removeAttribute()메소드를 통해 loginedMemberId,loginedMemberLoginId 제거

5. 게시물 테이블에 회원번호 칼럼 추가, memberId field 추가, article/doAdd 시 로그인 여부 체크, 작성자에 대한 정보 저장

1) article/doAdd 시 로그인 여부 체크, 작성자에 대한 정보 저장

        @RequestMapping("usr/article/doAdd")
        @ResponseBody
        public ResultData<Article> doAdd(HttpSession httpSession,String title, String body) {
            boolean isLogined = false;
            int loginedMemberId = -1;
            if(httpSession.getAttribute("loginedMemberId") !=null) {
                isLogined= true;
                loginedMemberId = (int)httpSession.getAttribute("loginedMemberId");
            }

            if(isLogined==false) {
                return ResultData.from("F-A", "로그인 후 이용가능 합니다.");
            }

            if (Ut.empty(title)) {
                return ResultData.from("F-1", Ut.f("제목을 입력해 주세요."));
            }
            if (Ut.empty(body)) {
                return ResultData.from("F-2", Ut.f("내용을 입력해 주세요."));
            }
            ResultData<Integer> writeRd = articleService.writeArticle(loginedMemberId,title, body);

            int id = (int) writeRd.getData1();
            Article article = articleService.getArticle(id);

            return ResultData.newData(writeRd, article);
        }
  • httpSession을 이용한 로그인 여부 체크, 로그인이된 상태에서만 게시글 작성 가능하게 구현
  • articleService.writeArticle( loginedMemberId, title, body) : 게시물 작성시 로그인된 회원의 아이디를 남김

2) 게시물 작성 쿼리문 수정

	<insert id="writeArticle">
		INSERT INTO article
		SET regDate = NOW(),
		updateDate =
		NOW(),
		memberId = #{loginedMemberId},
		title = #{title},
		`body`= #{body}
	</insert>
  • 로그인된 회원의 아이디를 게시물에 추가

3) memberId field 추가

        public class Article {
            private int id;
            private String regDate;
            private String updateDate;
            private int memberId;
            private String title;
            private String body;
        }
  • memberId필드 추가

6.usr/article/doDelete 권한 체크

1. 로그인 여부체크

		boolean isLogined = false;
		int loginedMemberId = -1;
		if(httpSession.getAttribute("loginedMemberId") !=null) {
			isLogined= true;
			loginedMemberId = (int)httpSession.getAttribute("loginedMemberId");
		}
		
		if(isLogined==false) {
			return ResultData.from("F-A", "로그인 후 이용가능 합니다.");
		}

2. 삭제 권한 체크

		Article article = articleService.getArticle(id);

		if (article == null) {
			return ResultData.from("F-1", Ut.f("%d번 게시물은 존재하지 않습니다.", id));
		}
		if((int)httpSession.getAttribute("loginedMemberId") !=article.getMemberId()) {
			return ResultData.from("F-2", "해당 게시물에 대한 삭제 권한이 없습니다.");
		}
  • 게시물에는 작성한회원의 번호가 남겨져있다.(memberId)
  • 로그인된 회원의 번호와 게시물에 저장되있는 memberId가 일치할때 삭제

0개의 댓글