Today Error
팀 프로젝트 마무리 단계에서
로그인 체크, 권한 설정을 좀 더 편하게 할 수 있는 방법이 없을까?라는 의문이 들었다.
분명 Spring에서 제공하는 도구가 있을 것이야..!
그러던 중 같은 클래스의 동기가
@PreAuthorize 을 말하는 것을 얼핏! 듣게되었다.
어..?뭐지 저건? 싶어서 얼른 검색해서 알아보았다.
역시나
Spring Security에서 Annotation 형태로
Class, Method 레벨 단위로 권한별 접근제어 기능을 제공한다는 것!!
그의 예시로
@Secured, @PostAuthorize, @PreAuthorize
이렇게 세가지의 Annotation을 통해 계정 접근을 편하게 만들어준다고 한다.
해당 Annotation들의 자세한 내용은 아래에서 자세하게
정리 해놓도록 하겠다.
1일 1개념
API를 만들다보면 어떤 조건에 부합하는 사용자만 접근을 할 수 있도록 제한을 둬야만 할 때가 있다.
예를들어, 관리자만 접근할 수 있는 API, 본인만 접근 할 수 있는 API 등등
까다롭고 복잡한 조건을 걸어서 접근을 제한하고 싶은 API가 있다면 어떻게 처리해야 할까?
Spring Security를 사용하여 인증를 구현했다면
Spring Security는 ROLE 기반의 권한처리가 기본
@Secured
어노테이션을 이용하면 사용자의 권한정보에 따라 자동으로 해당 메서드의 접근을 제한할 수 있게 된다.
@Secured("ROLE_ADMIN")
@RequestMapping( value = "/my/api/address", method = RequestMethod.GET )
public String somthingMethod( HttpServletRequest request, HttpServletResponse response ){
return "Hello, World!";
}
@PostAuthorize
어노테이션은 함수를 실행하고 클라이언트한테 응답을 하기 직전에 권한을 검사하는 어노테이션이다.
@PostAuthorize("isAuthenticated() and (( returnObject.name == principal.name ) or hasRole('ROLE_ADMIN'))")
@RequestMapping( value = "/{seq}", method = RequestMethod.GET )
public User getuser( @PathVariable("seq") long seq ){
return userService.findOne(seq);
}
@PreAuthorize
어노테이션은 요청이 들어와 함수를 실행하기 전에 권한을 검사하는 어노테이션이다.
@PreAuthorize("isAuthenticated() and (( #user.name == principal.name ) or hasRole('ROLE_ADMIN'))") @RequestMapping( value = "", method = RequestMethod.PUT)
public ResponseEntity<Message> updateUser( User user ){
userService.updateUser( user );
return new ResponseEntity<Message>( new Message(), HttpStatus.OK );
}
출처 : https://steemit.com/kr-dev/@igna84/spring-security-preauthorize-postauthorize
'내일배움캠프 > Today I Learned' 카테고리의 다른 글
[TIL] 나의 마흔 한번째 회고록 (0) | 2023.01.09 |
---|---|
[TIL] 나의 마흔 번째 회고록 (0) | 2023.01.06 |
[TIL] 나의 서른 여덟번째 회고록 (0) | 2023.01.04 |
[TIL] 나의 서른 일곱번째 회고록 (0) | 2023.01.04 |
[TIL] 나의 서른 여섯번째 회고록 (0) | 2022.12.29 |