첫번째 방법은 SecurityContextHolder를 사용하는 방법
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String username = authentication.getName();
logger.debug("current username : {}", username);
두번째 방법은 Method 선언에서 Principal 이나 Authentication 에 자동으로 할당 되는 값을 사용하는 방법
@RequestMapping(value = "/list")
public String list(Principal principal, ...) {
...
}
@RequestMapping(value = "/list")
public String list(Authentication authentication , ...) {
...
}
차이점은 Authentication 는 UserDetails로 형변환을 하여 추가 정보를 가져올 수 있다.
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
logger.debug("authorities: " + userDetails.getAuthorities());
실제 메소드로 넘어오는 값은 인증 유무에 따라
'UsernamePasswordAuthenticationToken' or 'AnonymousAuthenticationToken' 값이다.
컴퓨터 보안에서 principal이란 컴퓨터 시스템이나 네트워크로 부터 인증을 받을 수 있는 Entity를 말한다.
Principal은 개인, 컴퓨터, 서비스, 프로세스나 쓰레드 등이 될 수 있고, 특정한 자원에 접근을 할 때
필요한 식별자를 가질 수 있다.
'spring-project' 카테고리의 다른 글
Lombok @Slf4j Annotation (0) | 2020.01.05 |
---|---|
lombok (롬복) 설치하기. (0) | 2020.01.05 |
Spring MVC Request 객체는 매번 새로 생성 됨. (0) | 2020.01.02 |
Spring Boot 에서 JSP 사용하기 위한 라이브러리 추가 (0) | 2019.09.13 |
Spring Boot 최초 실행 시 'Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. ' (0) | 2019.09.10 |