티스토리 뷰

반응형

 

 

 



 

 

SpringBoot

 

 

Spring Security를 사용하면 강력한 로그인 기능을 사용할 수 있는데

간혹 내부 관련 각 사이트들끼리 자동 로그인을 시킬때가 있다.

 

이때 보통 A사이트에 로그인한 id 값, 쿠키, 세션 정보등을 가지고 

B사이트에 넘겨주어 계정 정보를 조회하여 별도의 로그인 없이 처리해주는 기능을 만들 수 있다.

 

간단하게 A 사이트에서 로그인 한 뒤 id값을 전달하여 

B사이트에서 id 체크 후 로그인 처리를 바로 해버리는 컨트롤러를 하나 작성하면 된다.

 

 

 

@GetMapping("/loginWithoutForm/{id}")
public String loginWithoutform(@PathVariable(value="id") String id) {
	UserDetails user = loginService.loadUserByUsername(id);
	Authentication auth = new UsernamePasswordAuthenticationToken(user, "", user.getAuthorities());
	SecurityContext context = SecurityContextHolder.createEmptyContext();
	context.setAuthentication(auth);
	SecurityContextHolder.setContext(context);
	return "redirect:/home";
}

 

 

 

나는 기존에 구현해놓은 UserDetailService 의 loadUserByUsername() 메소드로 정보를 체크한 뒤

해당 계정 정보로 인증 객체를 생성하고

 

SecurityContext 에 인증객체를 담아 SecurityContextHolder 에 context를 설정해주면 인증이 security 인증이 완료된다.

 

 

 

 

 

 

SecurityContextHolder.getContext().setAuthentication(auth);

 

SecurityContextHolder 를 위와 같이 처리해도 되지만 멀티스레드일때 문제를 야기할 수 있으므로 지양하고

빈 SecurityContext 를 생성하여 사용하는 것이 안전하다.

 

 

 

 



 

 

 

 

 

 

 

참고블로그
 

SecurityContextHolder

SecurityContextHolder 코드 구경

velog.io

 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Total
Today
Yesterday