본문 바로가기

국비과정/Spring

20230725 _[37일차]_01. Spring 게시판 글수정제한 (로그인)

 

로그아웃한 상태에서

주소창에 (ip주소)/edit?bno=(글번호) 으로 들어가면 해당 글번호의 수정페이지가 뜬다

이걸 막아보자

 

ModelAndView 선언시에 ()괄호안에 열어줄 jsp 를 적어줘야 하는데

일단 빈 괄호로 선언만 해주고

if 조건문으로 mid가 null이 아니라면(로그인했다면) 

로그인 한 경우에는 => mv.setViewName("edit");   => 수정페이지로 이동

else 

로그인 안한 경우에는 => mv.setViewName("redirect:/login");  => 로그인페이지로 이동

 

이제 로그인 안한 경우에 아래처럼 주소창으로 수정페이지 들어가면

아래처럼 로그인 페이지로 이동!

 

최종적으로 

로그인 한 경우에만 글을 쓸 수 있고, 자신이 쓴글만(id가 일치하는 경우에만) 수정할 수 있게 만들어줌


근데 로그인 한 경우에 아래처럼 오류가 난다

 

ip 검사부분에서 콤마(.)가 없으면 실행안되도록 조건 추가

 

오류나는 이유는??

코드 깨지는 부분이 System.out.println(dto.getBno()); 요부분

dto가 null인데 거기에서 getBno() 를 가져오니까 오류가 난다.

 

 

????????? 이부분 다시보기

 


ip주소 뽑아오는거에 if 조건문 추가


아래에도 if 조건문 추가 

내 글을 내가 수정하면 (result가 null이 아니라면)

남이 글을 수정하면 (null이 들어오면_dto가 null) else로 가서 경고창을 띄울거

result 값이 어떻게 뜨나 출력해보자

다른사람 글을 수정하려고 해보면 (주소창 edit 으로 들어가면)

 

 

(최종 수정본)


 

이제 null 값이 들어왔을 때 띄울 화면인 warning.jsp 파일을 생성

다른사람 글을 수정하려고 시도하면 아래처럼 뜬다

 

 

옛날방식 스타일 주기 (추천은 안함)

경고창 꾸며보자~

 

 

 

 


이제 좋아요라고 되어있는 조회수를 처리해보자

글을 클릭하면 조회수가 +1 이 되도록

 

서비스에서 DAO한테 일시킬 메소드 likeUp() 만들어주기 => 보내기만 하는 메소드 받는값 노필요

매개변수에는 dto2를 넣어줌 요 안에 있는 bno값을 가지고 가려고 

 

밑줄 클릭해서 DAO한테도 likeUp()메소드로 mapper에게 일시켜

mapper 에서 blike 증가시켜주는 명령문 써주기 (값을 보내기만 할거니 parameterType만 써주기)

가지고온 bno에 해당하는 글의 blike 를 계속 증가시켜줌! (blike += 1 => 요거는 안먹힌다)

 

글에 들어간 상태에서 계속 새로고침을 눌러도 조회수가 늘어난다~

 


로그인 했을때만 삭제할 수 있게 해보자

보드컨트롤러에서

확인용으로 잠시 삭제기능은 주석처리 해주고

로그인하고 글을 삭제해보면 삭제한 사람의 id가 콘솔창에 출력된다

 

mapper로 보내는 dto에 요 id를 같이 담아서 보내자

다시 삭제기능 주석도 해제

쿼리문에다가 아래처럼 id 비교부분 추가 (bno 랑 id 둘다 일치할때 지워)

오류난다 왜?

왜냐면 여기에서 m_no로 해줬으니 이걸로 비교해줘야함

서브쿼리로 (members의)m_id에 해당하는 m_no를 불러와 (board의) m_no 를 가져와줌

 

이제 주소창으로 삭제하는것도 막아주자

요렇게 해주면 주소창에 delete로 글 삭제를 시도하면 삭제가 안된다!!

 

입력창에 값이 있어야 로그인할 수 있도록 만들어주자

 

 


로그인 버튼을 누르면 check() 함수가 실행되도록 (! 팝업이 뜨도록) 해보자

 

 


 

let id = document.getElementById("ID"); => 요기는 input 창 전체 형태를 잡아온거

alert(id); 

팝업창을 띄워보면 요렇게 뜬다

 

값을 잡아오려면 alert(id.value);

id 입력창에 proror 입력하면 그게 첫번째 팝업으로 뜨고 

 

 

두번째 팝업으로는 pororo의 length인 6이뜬다

id입력길이 최소 4글자 이상으로 설정해주기

3글자 입력하면 팝업창 뜬다

 

 

 

id.focus(); 입력해주면

아이디 입력창으로 커서가 이동한다

* 버튼이 폼 안에있으면 폼이 실행됨 (버튼 타입을 따로 설정을 안해주면 기본 버튼타입임)

폼에다가 onsubmit="return check()" 추가해주자

버튼에다가 submit 타입을 줘도 되고 위의 방법을 사용해도됨

 

버튼 타입을 submit 으로 변경

버튼을 누르면 onsubmit으로 가게되어 check() 실행 후 

결과값이 참이면 post 실행 (로그인과정 실행)

 

 

암호도 id처럼 글자수 체크해주기

 

 

 

함수 checkID() 생성

하나라도 입력하거나 스페이스바 해도 작동

 

 

 

 

 

변경되는 값을 잡아서 출력해보자

아이디를 입력하면 아래에 span으로 출력


avaScript에서 호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. var 로 선언한 변수의 경우 호이스팅 시 undefined 로 변수를 초기화합니다.

var로 변수를 선언하면 아래쪽에 선언되어 있더라도 실행하면 먼저 값을 뽑아온 뒤에 실행이 되어서 위의 alert(a)가 작동이 됨. let으로 하면 작동안함! 


text를 전역변수로 선언해주고 아래로 가져가서 사용

check() 함수가 실행되도록 id를 4글자 미만으로 입력하고 비번치고 로그인 버튼 누르면 아래처럼 text가 msg에 들어가서 아래처럼 출력

 

 

 


글자수 제한 제목이랑 내용에도 넣어보자

 

내용은 다시 막아보자...


이제 페이징을 할건데 글이 120개 이상 필요

db에 더미글을 만들어주자  (마지막은 콤마가 아니라 세미콜론 주의**)

데이터에 더미글 200개가 생김

 

내일 할일