Ynns

spring security 프로젝트(5) 어노테이션 본문

JAVA/Spring

spring security 프로젝트(5) 어노테이션

yunassnn 2019. 11. 26. 15:34

servlet-context.xml 에서 어노테이션 활성화

<!-- @PreAuthorize @PostAutorize @Secured -->
<security:global-method-security pre-post-annotations="enabled" secured-annotations="enabled" />
	


BoardController 에서 새 글 쓰기 막기

@PreAuthorize("isAuthenticated()")//글을 등록할 수 있는 권한확인!! , isAuthenticated() : 로그인-> true / 로그아웃 -> false
	@GetMapping("/register")
	public void register() {
		log.info("새 글 작성 폼 요청");

	}

	@PreAuthorize("isAuthenticated()")
	@PostMapping("/register")
	public String newRegistPost(BoardVO vo, RedirectAttributes rttr) {
		log.info("새 글 작성");

		/*
		 * // (28) if (vo.getAttachList() != null) { for (BoardAttachVO attach :
		 * vo.getAttachList()) { log.info("" + attach); } }
		 */
		
		
		if(vo.getAttachList()!=null){
			vo.getAttachList().forEach(attach->System.out.println(attach));
		}
		
		if (service.newRegist(vo)) {
			rttr.addFlashAttribute("result", vo.getBno());
		}
		return "redirect:/board/getList";

	}

 

register.jsp 수정하기( tablib, principal )

새 글 작성시 writer에 사용자명 자동 등록

<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %>

...
<div class="form-group">
	<label>Writer</label>
    <input class="form-control" name="writer" required="required" 
    	value='<sec:authentication property="principal.username"/>' readonly="readonly">                				
</div>  
...

security에서 username == userid 같은 의미

 

read.jsp 인증된 사용자(글쓴이)가 아니라면 글을 수정하지 못하게 Modify 버튼 막기

<sec:authentication property="principal" var="info"/>
  <sec:authorize access="isAuthenticated()">
    <c:if test="${info.username==vo.writer}"></c:if>
    <button type="button" class="btn btn-default">Modify</button>     			
  </sec:authorize>
	<button type="reset" class="btn btn-info">List</button> 

<!-- 글쓰기 에러 수정 --!>

#user0 로그인 후 글쓰기 ==> [spring security가 CSRF 공격 자체를 방어함] ==> post 요청 거부 ==> 403 error

==> register.jsp 안에 csrf 토큰 값을 같이 넘겨 준다

register.jsp 
...
	<button type="submit" class="btn btn-default">Submit</button>              			
  	<button type="reset" class="btn btn-default">reset</button>  
	<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />            			
</form>
...

 

read.jsp 로그인 없이 댓글 쓰기 막기

...
Reply
<sec:authorize access="isAuthenticated()">    					
    <button id='addReplyBtn' class='btn btn-primary btn-xs pull-right'>New Reply</button>
</sec:authorize>
...

 

Comments