[SPRING] 경로 변수를 기반으로하는 스프링 보안 권한
SPRING경로 변수를 기반으로하는 스프링 보안 권한
내 유스 케이스는 @PathVariable 매개 변수를 기반으로 사용자를 인증하고 권한을 부여하는 것입니다. 보안 주체를 인증하려면 일부 사용자 지정 코드를 실행해야합니다. 여기에 접근하는 방법을 잘 모르겠습니다.
어떤 접근 방식이 바람직합니까, 아니면 이것을 깨끗하게하는 다른 방법이 있습니까?
해결법
-
==============================
1.해결책이 있습니다. 구성 클래스에서
해결책이 있습니다. 구성 클래스에서
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter
나는 방법을 가질 수 있었다
@Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/student/{id}/**") .access("@guard.checkUserId(authentication,#id)"); }
SpEL의 @guard는
@Component public class Guard { @Autowired private UserRepository repo; public boolean checkUserId(Authentication authentication, int id) { String name = authentication.getName(); System.out.println(name+" at "+id); User result = repo.findByUsername(name); return result != null && result.getPid() == id; } }
실제로 SpEL의 #id는 이전 행의 {id}에서 추출 된 값을 가져올 수 있습니다. checkUserId에서 원하는 모든 작업을 수행 할 수 있으며 리턴 값은 경로에 대한 액세스 허용 여부를 결정합니다.
-
==============================
2.내가 이것을 상상할 수있는 방법은 매개 변수에서 경로 변수를 캡처하고 메소드 레벨 권한 부여를 사용 한 다음 hasPermission을 사용하는 것입니다. 이 답변에는 도움이 될 경우를 대비하여 정확하게 수행하는 방법에 대한 세부 정보가 있습니다.
내가 이것을 상상할 수있는 방법은 매개 변수에서 경로 변수를 캡처하고 메소드 레벨 권한 부여를 사용 한 다음 hasPermission을 사용하는 것입니다. 이 답변에는 도움이 될 경우를 대비하여 정확하게 수행하는 방법에 대한 세부 정보가 있습니다.
from https://stackoverflow.com/questions/33115446/authorization-in-spring-security-based-on-path-variables by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Webflux,`ServerResponse` 테스트 (0) | 2019.08.14 |
---|---|
[SPRING] 직렬화에서 JPA Lazy Fetching을 트리거하는 Jackson (0) | 2019.08.13 |
[SPRING] 스프링 부트는 자바 주석에서 구성 속성 / 메시지를 외부화합니다. (0) | 2019.08.13 |
[SPRING] 프로그래밍 방식으로 Bean 검색 (0) | 2019.08.13 |
[SPRING] Heroku의 Spring Boot Gradle 앱 : jarfile에 액세스 할 수 없습니다 (0) | 2019.08.13 |