메소드 보안
BoardService.java와 UserService.java에 메소드 보안을 적용하겠다.
다음 소스에는 import org.springframework.security.access.prepost.PreAuthorize; 임포트 문이 필요하다.
UserService.java
//회원가입 public int addUser(User user); //회원권한 추가 public void addAuthority(String email, String authority); //로그인 public User login(String email, String passwd); //내 정보 수정 @PreAuthorize("#user.email == principal.username or hasRole('ROLE_ADMIN')") public int editAccount(User user); //비밀번호 변경 @PreAuthorize("#email == principal.username or hasRole('ROLE_ADMIN')") public int changePasswd(String currentPasswd, String newPasswd, String email); //탈퇴 @PreAuthorize("#user.email == principal.username or hasRole('ROLE_ADMIN')") public void bye(User user); //회원찾기 @PreAuthorize("#email == principal.username or hasRole('ROLE_ADMIN')") public User getUser(String email);
BoardService.java
//목록 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") public List<Article> getArticleList(String boardCd, String searchWord); //총 레코드 수 public int getTotalRecord(String boardCd, String searchWord); //글쓰기 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") public int addArticle(Article article); //첨부파일 추가 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") public void addAttachFile(AttachFile attachFile); //글수정 @PreAuthorize("#article.email == principal.username or hasRole('ROLE_ADMIN')") public void modifyArticle(Article article); //글삭제 @PreAuthorize("#article.email == principal.username or hasRole('ROLE_ADMIN')") public void removeArticle(Article article); //조회수 증가 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") public void increaseHit(int articleNo); //상세보기 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") public Article getArticle(int articleNo); //다음글 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") public Article getNextArticle(int articleNo, String boardCd, String searchWord); //이전글 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") public Article getPrevArticle(int articleNo, String boardCd, String searchWord); //첨부파일 리스트 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") public List<AttachFile> getAttachFileList(int articleNo); //첨부파일 삭제 @PreAuthorize("#attachFile.email == principal.username or hasRole('ROLE_ADMIN')") public void removeAttachFile(AttachFile attachFile); //게시판 이름 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") public String getBoardNm(String boardCd); //댓글 쓰기 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") public void addComment(Comment comment); //댓글 수정 @PreAuthorize("#comment.email == principal.username or hasRole('ROLE_ADMIN')") public void modifyComment(Comment comment); //댓글 삭제 @PreAuthorize("#comment.email == principal.username or hasRole('ROLE_ADMIN')") public void removeComment(Comment comment); //댓글 리스트 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") public List<Comment> getCommentList(int articleNo); //첨부파일 찾기 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") public AttachFile getAttachFile(int attachFileNo); //댓글 찾기 @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_USER')") public Comment getComment(int commentNo);
테스트
빌드하고 http://localhost:8080/users/login을 방문하여 im@gmail.org/1111로 로그인한다.
게시판 목록에서 hong@gmail.org 메일을 쓰는 홍길동이 작성한 게시글을 클릭한다.
수정 버튼을 클릭하여 글수정 화면으로 이동한다.
글수정 화면에서 수정 후 전송을 클릭한다.
메소드 보안이 잘 작동한다면 noAuthority.jsp로 이동한다.