inflearn logo
강의

講義

知識共有

スプリングセキュリティ

3) アノテーション権限の設定 - @PreAuthorize, @PostAuthorize, @Secured, @RolesAllowed

@PreAuthorize에 사용하는 SpEL 문법에 대해 질문드립니다.

769

foobar

投稿した質問数 9

0

선생님 안녕하세요 

@PreAuthorize 에서 사용한 SpEL 문법 사용 원리에 대해 제가 정확하게 이해하고 있는지 확신이 안서서 질문드립니다.

1. 먼저 해당 SpEL 표현에서 account, principal 두가지 변수를 참조하는데 account 앞에만 # 을 붙이는 이유는

aop/method.html 파일 내에서 th:href="@{/preAuthorize(username='user')}" 를 통해 생성된 AccountDto 객체를 참조하기 위해서 인가요?

그렇다면 principal 에 #이 안붙는 이유는 클라이언트가 인증 정보를 가지고 있는 경우 스프링 컨트롤러에서 매개변수를 통해 principal 객체를 가져오도록 지원하는 건가요??

2. 현재 principal 객체의 클래스는 UsernamePasswordAuthenticationToken 인데 저희 강의에서 사용하는 Account 객체를 담는 토큰이라고 생각하고 있었습니다. 

그렇다면 Account 객체의 username 값을 참조하려면

아래 사진의 Evaluate Expression을 통해 확인한 것 처럼 principal.principal.username 으로 표현해야 한다고 생각했습니다. 그래서 SpEL 표현을 principal.principal.username으로 변경하여 테스트 해보았는데 SpEL 문법 예외가 발생하는것을 확인했습니다.

어째서 오직 principal.username로만 username 값에 참조를 할 수 있는지 궁금합니다.. 

제가 SpEL 표현법을 완벽히 숙지하지 못해서 이해가 안가는 것 같은데요.. 스프링 시큐리티와 크게 관련된 내용이 아니라서 질문을 드려도 될지는 모르겠지만 SpEL 관련 자료를 열심히 찾아봐도 마땅한 이유를 찾지 못해서 질문드립니다. 좋은 강의 감사합니다.

@PreAuthorize spring-boot Spring Security java

回答 2

0

foobar

스프링 시큐리티의 principal 에 대한 개념이 정확하게 잡힌것 같습니다.

정성스러운 답변 감사합니다!!

0

leaven

먼저 답변이 늦어 죄송합니다.

1번 질문 답변입니다.

말씀하신대로 객체를 참조하기 위해서는 #을 붙여야 합니다. 

즉 메서드의 객체 파라미터에 접근할 수 있는 접두문자라고 보시면 됩니다.

가령 메소드 파라미터로 User 객체가 넘어온다면 #user 와 같이 사용할 수 있는 개념입니다. 

그리고 principal 은 스프링 시큐리티에서 사용자인증 정보에 접근할 수 있도록 표현식으로 제공하는 문법이라 보시면 됩니다.

isAuthenticated() 와 같은 것도 같은 맥락입니다.

2번 질문 답변입니다.

principal 은 Object 타입으로 인증정보와 관련된 어떤 객체를 할당해도 됩니다.

다만 인정정보가 저장된 pincipal 의 속성을 표현식으로 나타낼 경우에는 principal 에는 최종 인정정보가 저장되어 있다고 가정하고 있습니다.

그렇기 때문에 principal 에 여러 인증객체를 저장한다 해서 참조를 여러단계에 걸쳐 할 수 없습니다.

단순하게 생각해서 principal 은 인증객체 그 자체라고 생각하시면 됩니다.

시큐리티 공부 버전 질문

0

176

1

[해결 방법] MethodSecurityConfig.customMethodSecurityMetadataSource() 호출하지 않는 이슈

0

187

1

AbstractSecurityInterceptor.class.beforeInvocation()를 2번 실행하는 경우

0

178

1

강의 코드가 왜이렇게 뒤죽박죽인가요...

0

253

1

메인 페이지로 접속해도 login url로 리다이렉트가 되지 않습니다..

0

238

1

파라미터값이 넘어가지 않습니다 ....

0

375

1

security filterChain 설정 질문이 있습니다.

0

332

1

소스 부분 질문 드립니다.

0

210

2

섹션4 7번 강의 문제가 있는거 같네요.

0

345

2

파일이 수시로 이름이 바껴있네요 ㄷㄷ

0

306

1

HttpSessionSecurityContextRepository를 사용안하는 문제

0

557

2

error , exception 이 잘 안됩니다.

0

284

2

thymeleaf tag 질문합니다.

0

198

2

버전업하면서 deprecated된 것들이 너무많아요

0

478

1

spring security 패치 관련

0

437

1

모바일을 사용할때 토큰말고 세션

0

850

2

DB 연동한 인가 부분에 대한 질문입니다!

0

265

1

Ajax방식도 똑같이 Session방식을 사용하는건가요?

0

308

1

Config 파일 생성 시 질문이 있습니다.

0

228

1

강사님 몇일동안 구글 검색만 100개 했는데도 이유를 모르겠습니다..

1

433

2

403 에러 뜹니다.

0

813

2

login_proc의 존재에 대한 간략한 설명입니다

0

277

1

top.html에 로그인 링크를 만들어서 로그인을 해봤습니다

0

287

2

안녕하세요. DB에 저장될 때 이해 안 가는 값이 있어서 질문드립니다!

0

191

1