Spring Security Url 패턴 우선순위

도준혁·2022년 5월 26일
1
post-thumbnail

관리자 페이지에 로그인 해야 하는데 관리자가 아니시네요?

스프링 부트를 사용하여 진행되는 거의 모든 프로젝트에서는 로그인 및 권한 관리 툴로써 Spring Security 를 사용할 것이다. 본인도 마찬가지로 스프링 시큐리티를 사용하며 중복되는 url 패턴의 우선순위 작업 도중 버그를 만나게 되었는데, 그 우선순위에 대한 이야기를 하려고 한다.

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

http
	.authorizeRequest()
		.antMatchers("/admin/login").permitAll()
		.antMatchers("/admin/**").hasRole("ADMIN")

...}
--------------------------------------------------------------------------------------------------

		.antMatchers("/admin/**").hasRole("ADMIN")
		.antMatchers("/admin/login").permitAll()

...}

위의 사항에서 /admin/~~~ 뒤로 오는 모든 사이트는 Admin 역할을 가진 관리자만 접근할 수 있으면서, /admin/login 이라는 로그인은 모두가 접근할 수 있게 함으로써 관리자가 접근하여 로그인 할 수 있게 설계를 할려면,

/admin 으로 들어오는 url 패턴은 모두 관리자를 위한 페이지를 제공하면서 관리자가 로그인을 하는 시점에는 모두가 접근할 수 있어야 하므로 /admin/login 은 모든 사람이 접근할 수 있게 설계를 하려면!

위의 예시에서 위 코드가 맞을까, 아래 코드가 맞을까?


결론적으로는 위 코드 가 맞다. 우선순위는 역할을 부여하는 것으로 결정되는 것이 아닌, 바로 url 패턴으로 결정되는 것이었는데, url 패턴이 좀 더 세부적일 수록(/admin/login) 위쪽으로 먼저 작성하고, 좀 더 브로드 할수록(/admin/**)아래쪽으로 설정해줘야 정상작동한다고 한다.

라이브러리를 파헤쳐보다가 포기하였지만... 처음 든 예상으로는 어댑터 성능상 위쪽부터 파싱해가면서 세부적인 로직에 먼저 접근하여 권한부여가 끝나면 아래쪽에서 break가 걸리지 않을까 라는 예상이 된다. 내가 어댑터를 만들더라도 한 어레이를 순회중에 원하는 아이템을 발견하면 거기서 멈추도록 프로그램을 만들었을 것이기 때문이다.

자세한 로직은 더 공부를 하고 라이브러리를 헤쳐본 다음에 재포스팅 하도록 하겠다..

*참고자료
1. https://www.baeldung.com/spring-security-expressions
2. https://stackoverflow.com/questions/30819337/multiple-antmatchers-in-spring-security

profile
ML Ops 와 백엔드를 개발하고 있는 도준혁입니다

1개의 댓글

comment-user-thumbnail
2023년 2월 9일

감사합니다 미래의 제가 도움을 받았습니다.

답글 달기