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";
}
'Programming > Spring Boot' 카테고리의 다른 글
Spring AOP를 활용한 모든 Request에 Log 남기기 (0) | 2023.03.29 |
---|---|
[Jasypt] Spring Boot 애플리케이션의 프로퍼티 암호화 (0) | 2023.03.24 |
[Maven] 라이브러리 Dependency 충돌 해결하기(Maven Tree) (0) | 2023.03.02 |
[Mybatis] PostgreSQL ilike 구현하기(feat. Criteria 커스텀하기) (0) | 2022.08.20 |
[Spring Security] 두개의 로그인 페이지(Multiple Login Pages) (0) | 2022.08.10 |