Programming/Spring Boot

[Spring Security] 수동 인증(강제 로그인)

빈쿵바라기 2023. 5. 16. 11:33

Spring 프로젝트를 진행하다보면 정의되지 않은 폼을 통해서 인증 처리를 해주어야 하는 경우가 있다.

이럴 때 특정 인가된 정보를 SecurityContext에 수동으로 등록해주고 세션에 주입해주면 된다.

@RequestMapping(value="login", method=RequestMethod.POST)
public String login(HttpServletRequest request) throws Exception{
    CustomUserDetailsImpl user = new CustomUserDetailsImpl();

    // 수동으로 권한 설정
    List<GrantedAuthority> roles = new ArrayList<>();
    roles.add(new SimpleGrantedAuthority("ROLE_USER"));
    user.setUserRole(roles);

    user.setUsername("Tester");

    // 설정된 사용자 정보를 SecurityContext에 등록
    Authentication auth = new UsernamePasswordAuthenticationToken(user, null, roles);
    SecurityContext securityContext = SecurityContextHolder.getContext();
	securityContext.setAuthentication(auth);

	// 세션에 Spring Seuciry Context를 주입
    HttpSession session = request.getSession(true);
    session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext);
	
    return "redirect:/login/success";
}