티스토리 뷰
Spring Security @Secured, @PreAuthorize, @PostAuthorize Annotation이 동작하지 않을 때
야훔 2018. 1. 17. 16:43요즘 장학도사라는 사이트를 만들고 있다.
이 사이트 광고를 좀 하자면 국내의 장학재단들이 있고 장학재단들이 갖고 있는 장학금의 종류가 무려 2천여개던가? 그렇단다.
그래서 "(주) 꿈꾸는 세상" 대표랑 둘이서 등록금때문에 힘들어서 학업을 포기하려고 하는 학생들이나 생활이 힘들어 학업을 더이상 진행할 수 없는 학생들을 위해서 꿍짝꿍짝하면서 만들고 있다. 사실 몇년 전에 한번 만들었는데 지금 기술과 노하우와 여러가지 기능들을 더해 조금 더 좋은 서비스를 하기위해 올 2월 중순에 오픈할 예정으로 새로 만드는 중이다.
이 사이트를 만들던 도중 Spring Security를 적용해 인증처리를 하려고 하는데 문제가 발생했다. @Secured 어노테이션과 @PreAuthorize, @PostAuthorize 어노테이션이 동작하질 않는 거다. 완전 난처한 상황이 벌어졌다.
그래서 검색을 좀 해보고 여기저기 기웃기웃거려보고 책도 좀 뒤져보고 해서 알아낸 내용은 아래와 같다.
Spring Security의 설정은 Spring boot를 사용할 경우 WebSecurityConfigurerAdapter를 확장해서 만든다. 일반적으로 과거에 사용했던 Spring Framework 를 이용한 구성에서는 xml 파일을 통해 설정을 했었는데 Spring boot에서는 Config 클래스를 만들어서 설정한다.
(뭐 다른 방법이 있을지도 모르지만 내 공부가 아직 부족하여.... ㅠ)
이때 기본 설정내용이 위에서 이야기했던 어노테이션의 사용설정은 죄다 false로 설정되어있다는 사실이었다. 그래서 각 경로에 따른 접근권한 설정은 기본적으로 HttpSecurity에 있는 authorizeRequests() 메서드를 통해서만 동작하도록 되어있다.
왜 이런방식으로 만들어진 것일까 하고 스프링 시큐리티 프로젝트 문서사이트를 확인해보니 이 어노테이션 기반 글로벌 시큐리티 설정이 Spring Security 2.0 버전 이후부터 적용이 가능하다고 나와있어서 그 이전 버전을 사용하는 프로젝트와 충돌을 일으키는 것을 방지하기 위함이었다고 생각했다.
사실 어노테이션을 사용하는 방법과 authorizeRequest() 메서드를 이용한 보안 적용방식은 각자의 장단점이 있다.
어노테이션을 사용하는 경우 장점
- 가독성이 좋아진다.(주관적인 견해)
- 사용하기 쉽다.(주관적인 견해)
어노테이션을 사용하는 경우 단점
- 관리 포인트가 겁나 많아진다.(한 곳에서 관리가 안된다)
authorizeRequest메서드를 사용하는 경우 장점
- 관리 포인트가 하나라서 config 클래스만 열면 전체 접근권한을 컨트롤 할 수 있다.
authorizeRequest메서드를 사용하는 경우 단점
- 가독성이 썩 좋지 않다.(주관적인 견해)
- 사용하기도 좀 까다롭다.(물론 익숙해지면 이게 더 쉬울 수도 있지만..)
@Configuration
@ComponentScan(basePackages = "your.package.path")
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
....
}
p.s 스프링 시큐리티 관련 내용은 조금 더 정리되고 난 뒤에 진행하겠다. 이건 머 거의 책 쓰는 수준으로 내용이 많아서 공부하고 정리할게 많아서...
'Dev > Java' 카테고리의 다른 글
외부 jar 파일 dependency 하기 (0) | 2019.02.28 |
---|---|
Spring Security @PreAuthorize, @PostAuthorize 를 사용하는 신박한 전처리 후처리 기법 (0) | 2018.01.18 |
Spring Boot MongoDB와 Redis 설정하기 (0) | 2017.12.29 |
Spring boot로 Web프로젝트 시작하기 #7. JPA-Hibernate 셋팅(2편) (0) | 2017.12.07 |
Spring boot로 Web프로젝트 시작하기 #6. JPA-Hibernate 셋팅(1편) (0) | 2017.12.05 |
- TAG
- security, Spring, Spring boot, spring security, 스프링, 스프링 부트, 스프링 시큐리티