spring-project

spring security 로그인 username 가져오기

가는가래 2020. 1. 3. 01:45

첫번째 방법은 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은 개인, 컴퓨터, 서비스, 프로세스나 쓰레드 등이 될 수 있고, 특정한 자원에 접근을 할 때
필요한 식별자를 가질 수 있다.