묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
섹션.8 메서드 기반 권한 부여 @PreAuthorize
안녕하세요? 섹션8. 메서드 기반 권한 부여 강의 보다가 잘 안되는 부분이 있어서 질문 드립니다! (16분 쯤에 설명 나오는 부분입니다!) @GetMapping("/user/{id}") @PreAuthorize("#id == authentication.name") public String authentication(@PathVariable(name = "id") String id){ return id; }해당 강의에서 user 로 로그인 시 위 url 로 접근이 가능했는데, 똑같이 해봤는데 403 이 떴습니다. 혹시나 해서 공유해주신 github 프로젝트로 해당 branch 로 체크아웃했더니 같은 현상이 나타납니다.이것저것 시도해보다가 스프링 공식페이지에서 @P 어노테이션에 대한 설명이 있길래 아래와 같이 도입해봤더니 정상동작합니다.@GetMapping("/user/{id}") @PreAuthorize("#id == authentication.name") public String authentication(@P("id") @PathVariable(name = "id") String id){ return id; }https://docs.spring.io/spring-security/reference/servlet/authorization/method-security.html 강의 하실 때보다 시큐리티 버젼이 또 올라가서 안되는 부분이 생긴 것일까요?아니면 제가 어떤 부분을 놓치고 있는걸까요? ㅠ
-
미해결스프링 시큐리티
@PreAuthorize에 사용하는 SpEL 문법에 대해 질문드립니다.
선생님 안녕하세요 @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 관련 자료를 열심히 찾아봐도 마땅한 이유를 찾지 못해서 질문드립니다. 좋은 강의 감사합니다.