[SPRING] Spring MVC 컨트롤러의 보안 컨텍스트에서 UserDetails 객체 가져 오기
SPRINGSpring MVC 컨트롤러의 보안 컨텍스트에서 UserDetails 객체 가져 오기
스프링 보안 3과 스프링 MVC 3.05를 사용하고 있습니다.
현재 로그인 한 사용자의 사용자 이름을 인쇄하고 싶습니다. 어떻게 내 컨트롤러에서 UserDetails를 가져올 수 있습니까?
@RequestMapping(value="/index.html", method=RequestMethod.GET)
public ModelAndView indexView(){
UserDetails user = ?
mv.addObject("username", user.getUsername());
ModelAndView mv = new ModelAndView("index");
return mv;
}
해결법
-
==============================
1.사용자가 로그인했는지 이미 알고있는 경우 (예 : /index.html이 보호 된 경우)
사용자가 로그인했는지 이미 알고있는 경우 (예 : /index.html이 보호 된 경우)
UserDetails userDetails = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
먼저 사용자가 로그인했는지 확인하려면 현재 인증이 AnonymousAuthenticationToken이 아닌지 확인하십시오.
Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (!(auth instanceof AnonymousAuthenticationToken)) { // userDetails = auth.getPrincipal() }
-
==============================
2.스프링 3 분사가 이것을 처리하도록하십시오.
스프링 3 분사가 이것을 처리하도록하십시오.
tsunade21 덕분에 가장 쉬운 방법은 다음과 같습니다.
@RequestMapping(method = RequestMethod.GET) public ModelAndView anyMethodNameGoesHere(Principal principal) { final String loggedInUserName = principal.getName(); }
-
==============================
3.페이지에 사용자 이름 만 인쇄하려는 경우이 솔루션이 마음에들 것입니다. 객체 주조물이 없으며 Spring Security가 없어도 작동합니다.
페이지에 사용자 이름 만 인쇄하려는 경우이 솔루션이 마음에들 것입니다. 객체 주조물이 없으며 Spring Security가 없어도 작동합니다.
@RequestMapping(value = "/index.html", method = RequestMethod.GET) public ModelAndView indexView(HttpServletRequest request) { ModelAndView mv = new ModelAndView("index"); String userName = "not logged in"; // Any default user name Principal principal = request.getUserPrincipal(); if (principal != null) { userName = principal.getName(); } mv.addObject("username", userName); // By adding a little code (same way) you can check if user has any // roles you need, for example: boolean fAdmin = request.isUserInRole("ROLE_ADMIN"); mv.addObject("isAdmin", fAdmin); return mv; }
참고 "HttpServletRequest 요청"매개 변수가 추가되었습니다.
Spring은 HttpServletRequest, Principal 등을위한 자체 객체 (래퍼)를 삽입하기 때문에 잘 작동하므로 사용자는 표준 Java 메소드를 사용하여 사용자 정보를 검색 할 수 있습니다.
-
==============================
4.이것이 또 다른 해결책입니다 (Spring Security 3).
이것이 또 다른 해결책입니다 (Spring Security 3).
public String getLoggedUser() throws Exception { String name = SecurityContextHolder.getContext().getAuthentication().getName(); return (!name.equals("anonymousUser")) ? name : null; }
-
==============================
5.당신이 봄 보안을 사용한다면 당신은 현재 로그인 한 사용자를
당신이 봄 보안을 사용한다면 당신은 현재 로그인 한 사용자를
Authentication auth = SecurityContextHolder.getContext().getAuthentication(); String name = auth.getName(); //get logged in username
from https://stackoverflow.com/questions/6161985/get-userdetails-object-from-security-context-in-spring-mvc-controller by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] HttpSecurity, WebSecurity 및 AuthenticationManagerBuilder (0) | 2019.01.07 |
---|---|
[SPRING] Stateless 세션 빈을 통해 Stateful 세션 빈을 사용할 때? (0) | 2019.01.07 |
[SPRING] 서블릿과 웹 서비스의 차이점 (0) | 2019.01.07 |
[SPRING] mockMvc를 사용하여 응답 본문에서 문자열을 확인하는 방법 (0) | 2019.01.07 |
[SPRING] 여러 프로젝트 / 모듈에서 PropertyPlaceholderConfigurer를 통해 여러 속성 파일 사용 (0) | 2019.01.07 |