[댓글기능에서의 Ajax]
1. ReplyController 고려사항
1) 댓글의 등록
(1) 로그인한 사용자만이 댓글을 추가할 수 있도록 합니다.
2) 댓글의 수정과 삭제
(1) 로그인한 사용자와 댓글 작성자의 아이디를 비교해서 같은 경우에만 댓글을 수정/삭제할 수 있도록 합니다.
2. 브라우저 고려사항
1) 댓글의 등록
(1) CSRF 토큰을 같이 전송하도록 수정합니다.
2) 댓글의 수정/삭제
(1) 기존 댓글 삭제에는 댓글 번호만을 처리했는데, 서버쪽에서 사용할 것이므로
댓글 작성자를 같이 전송하도록 수정합니다.
3. get.jsp javascript에서 인증받은 사용자만 댓글을 추가할 수 있도록 추가합니다.
get.jsp toekn 이 아니라 token 으로 하면 오류가 안납니다.(오타)
4. ReplyController 의 @PostMapping(new) create() 메소드에
@PreAuthorize("isAuthenticated()")를 추가합니다.
ReplyController.java
manager80으로 로그인 했을 때 Replyer 의 username을 불러옵니다.
<sec: authentication property="principal.username "/>
댓글이 정상적으로 등록되었음을 확인합니다.
[댓글 삭제]
1. 자신이 작성한 댓글만 삭제가 가능하도록 하기 위해 get.jsp javascript remove 버튼에
다음과 같은 코드를 추가합니다.
1) if(!replyer)로 로그인하지 않은 사용자는 로그인하도록 경고창을 띄우고
2) originalReplyer 에 댓글작성자에 대한 정보를 넣어,
현재 replye 와 orginalReplyer를 비교(!=)하여 다르면 자신이 작성한 댓글만 삭제가 가능하도록
경고창을 띄웁니다.
get.jsp
2. reply.js 의 function remove에 replyer Json 데이타를 추가합니다.
reply.js
3. ReplyController.java의 @DeleteMapping(value="{rno}") remove()에
@PreAuthorize("principal.username == #vo.replyer") 를 하여
현재 접속한 사용자(username)과 vo.replyer(댓글작성자)를 비교하여 같으면 권한을 부여합니다.
@RequestBody ReplyVO vo 를 추가하여 ReplyVO 객체를 받아 #vo.replyer를 사용하고 log도 찍어봅니다.
ReplyController.java
로그인 하지 않았을 때 댓글 삭제
다른 사용자(admin90)으로 로그인 했을 때 댓글 삭제
댓글 작성자(manager80)으로 로그인 했을 때 댓글 삭제 성공
댓글삭제 확인
[댓글 수정]
댓글 삭제와 마찬가지로 댓글의 작성자가 같이 전송되도록 수정하여야 합니다.
1. get.jsp javascript의 modalModlBtn 이벤트에 다음과 같은 코드를 추가합니다.
1) 결과에 originalReplyer를 반환하지 않는 이유는 replyer에 들어있기 때문입니다.
get.jsp javascirpt, ModifyButton Event
2. ReplyController.java 에 modify() 에
@PreAuthorize("principal.username == #vo.replyer")를 추가합니다.
ReplyController.java
댓글작성자(admin90)의 댓글 수정 확인
타인(manager80)의 댓글 수정 불가 확인
[로그아웃 처리]
로그인이 되어있다면 User Profile 과 Logout 이 나오게
로그인이 되어 있지 않다면 Login 과 Join이 나오게 하도록 합니다.
1. header.jsp 에 Spring Security 를 적용합니다.
header.jsp 위에 taglib sec 추가하셔야 합니다.
로그인 하지 않은 사용자가 눌렀을 때, 각 Login(customLogin)과 Join(404 Error)을 눌렀을 때 링크로 이동합니다.
2. 로그아웃 페이지를 만들기 위해 CustomLogout.jsp 를 BootStrap 형식으로 합니다.
CustomLogin 때처럼 매우 귀찮은 작업이므로.. 파일 첨부합니다.
첨부파일
customLogout.jsp
admin90으로 Login 후 Logout 했을 때 화면입니다. Logout 버튼을 눌렀을 때 Login 화면이 나오면 됩니다.
※ 지금까지 로그인하면 계속 home.jsp 로 가지므로 localhost:8080/board/list로 따로 입력해서 가주어야 했습니다. 이제 home.jsp 에 script 로 self.location="/board/list"를 입력하여 게시글 목록보기로 이동하도록 합니다.
home.jsp
[회원가입 기능 추가]
1. 회원가입 url을 다루는 MemberController.java 를 추가합니다.
1) 회원가입이 완료된다면 result 에 member.getUserid(아이디입니다.)를 넣어
customLogin으로 redirect합니다.
MemberController.java
2. MemberService.java (인터페이스)를 추가합니다.
1) join 메소드로 MemberVO 객체를 받아 tbl_member 에 데이터를 주입합니다.
MemberService.java
3. MemberServiceImpl.java 를 추가합니다.
1) MemMapper, MemberAuthMapper(멤버에 따른 권한을 모아놓음), PasswordEncoder를 주입받아
join()을 합니다.
MemberServiceImpl.java
4. MemberMapper.java 를 수정합니다.
1) insert 메소드를 추가했습니다.
MemeberMapper.java
5. MemberMapper.xml 도 수정합니다.
1) MemberVO 에서 userName 을 username 으로 바꿀 것입니다. 그래서 property를 username으로 바꾸고
MemberMapper.java의 inset 메소드에 대한 쿼리문을 추가합니다.
6. MemberAuthMapper.java 인터페이스를 생성합니다.
1) AuthVO (사용자별 권한)을 가지고 있는 DB 에 insert 하는 메소드를 가집니다.
MemberAuthMapper.java
7. MemberAuthMapper.xml 를 생성합니다.
1) MemberAuthMapper.java 의 insert 에 대한 쿼리문을 작성한 것입니다.
8. MemberVO 를 변경합니다.
1) userName 을 username 으로 바꾼 것입니다.
9. customLogin.jsp 를 변경합니다.
1) 회원가입하고 customLogin 으로 redirect 할 때 result(회원가입한 userid)를 받기 위한 것입니다.
customLogin.jsp
10. /member/join.jsp 를 생성합니다.
/member/join.jsp
회원가입 화면
회원가입 입력
회원가입 성공하면서 customLogin 으로 redirect 하였고 userid 값을 value=${result}로 받아왔습니다.
DB에 들어감을 확인합니다. enabled는...
제가 테이블 만지다가 default를 없애버려서 default '1'로 하면 1로 자동으로 입력됩니다.
tbl_member_auth 에도 잘 들어감을 확인합니다.