# 10. SpringSecurity 인증 후 로그인 객체는 어떻게?

SpringBoot 에서 Security 인증 후에 우리는 어떻게 로그인 한 객체의 정보를 받아올 수 있을까?

1. Bean을 통해 사용자 정보를 가져온다.
2. Controller 에서 사용자 정보를 얻는다.
3. @Authentication Principal 을 사용한다.
4. 설명은 하지만 본인이 실제로 해본 작업은 2번이다. 2번에 대해서는 작업한 내용을 보면서 설명한다.

## 1. Bean을 통해 가져오기

SecurityContextHolder를 통해 가져오는 방법이다.

```
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
UserDetails userDetails = (UserDetails)principal; 
String username = principal.getUsername(); 
String password = principal.getPassword();
```

## 2. Controller 에서 사용자 정보를 얻는다.

Principal 객체에 접근해 정보를 가져온다.

```
@Controller 
public class SecurityController { 
    @GetMapping("/username") 
    @ResponseBody 
    public String currentUserName(Principal principal) { 
        return principal.getName(); 
    } 
}
```

본인의 경우 다음처럼 활용을 했었다. Authentication을 통해서 현재 로그인한 사용자의 id를 통해 DB에서 사용자 내역을 받아오게 했다.

```
public int addActivity(@RequestParam("name") String name,Activity activity,Hash hash,Authentication authentication) {
    //현재 로그인한 유저의 정보를 받아옵니다.
    UserDetails userDetails = (UserDetails) authentication.getPrincipal();
    Member m = memRepo.findOneByMid(userDetails.getUsername());
    List<Activity> activityList = m.getActivities();
```

JDBC Authorization을 사용했을 때, 아래와 같이 userDetails 정보를 받아왔음.

```
org.springframework.security.core.userdetails.User@5b2ffc6: 
    Username: djunnni; 
    Password: [PROTECTED]; 
    Enabled: true; 
    AccountNonExpired: true; 
    credentialsNonExpired: true; 
    AccountNonLocked: true; 
    Granted Authorities: ROLE_MEMBER
```

## 3. @Authentication Principal 을 사용한다.

이에 대해서는 [\[Spring Security\] 현재 로그인한 사용자 정보 가져오기](https://itstory.tk/entry/Spring-Security-%ED%98%84%EC%9E%AC-%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%95%9C-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0)를 참고하길 바란다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://djunnni.gitbook.io/springboot/2019-11-30.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
