-
시큐리티 권한처리스프링/스프링 시큐리티 2024. 1. 8. 20:51
이전에 SecurityConfig에서 /manager 경로는 ADMIN, MANAGER만 접근이 가능하게 했다. 또한, /admin 경로는 ADMIN만 접근이 가능하게 했었다.
Role을 저렇게 부여하면 스프링 시큐리티에서 자동으로 ROLE_ADMIN, ROLE_MANAGER 등으로 바꿔준다.
따라서 우리가 설정할 때에도 권한 값에 위와 같이 넣어줘야 한다.
(ROLE_MANAGER가 아니라 MANAGER라고만 해서 접근이 안되어서 엄청 헤맸다...)
간편하게 권한을 부여하는 방법이 또 있다.
@Configuration @EnableWebSecurity // 스프링 시큐리티 필터가 스프링 필터체인에 등록이 된다. @EnableGlobalMethodSecurity(securedEnabled = true) public class SecurityConfig { }
SecurityConfig에 @EnableGlobalMethodSecurity(securedEnable = true)라는 어노테이션을 추가해준다.
@Controller public class IndexController { @Autowired private UserRepository userRepository; @Autowired private BCryptPasswordEncoder bCryptPasswordEncoder; @Secured("ROLE_ADMIN") @GetMapping("/info") public @ResponseBody String info() { return "개인정보"; } }
API 앞에 @Secured 어노테이션을 붙여주면 해당 권한을 가진 사람만 접근할 수 있다.
위에서는 @Secured("ROLE_ADMIN")으로 Role이 ROLE_ADMIN인 사람만 페이지에 접근이 가능하도록 했다.
여기서는 ADMIN이 아니라 ROLE_ADMIN으로 넣어줘야 한다.
특정한 하나에만 권한을 부여할 때 @Secured를 사용하면 좋고, 아니라면 위에처럼 SecurityConfig에서 필터를 해주는 것이 좋다.
@Controller public class IndexController { @Autowired private UserRepository userRepository; @Autowired private BCryptPasswordEncoder bCryptPasswordEncoder; @PreAuthorize("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')") // 2개의 권한을 한번에 걸 때 유용하다. @GetMapping("/data") public @ResponseBody String data() { return "데이터정보"; } }
다른 방법으로 @PreAuthroize 어노테이션이 있다. 2개의 권한을 한 번에 걸 때 유용하지만 많이 쓰이지는 않는다고 한다.
'스프링 > 스프링 시큐리티' 카테고리의 다른 글
OAuth - 구글 로그인(Authentication 객체가 가지는 2가지 타입) (0) 2024.01.09 OAuth - 구글 로그인(구글 api를 통해 회원 프로필 받아오기) (0) 2024.01.09 Security Session (0) 2024.01.08 회원가입 시 비밀번호 암호화 (0) 2024.01.08 스프링 필터 - 권한 있는 사람만 접근 (0) 2024.01.08