Spring Security
스프링 시큐리티 자동로그인 Remember-me 안될 때 해결방법
dev.mk
2023. 11. 5. 21:05
반응형
일반적인 스프링시큐리티 자동로그인 설정을 하였지만 여러 문제가 발생
대표적인 문제는 브라우저에 remember-me 쿠키가 생성 안되는 문제다.
1. 시큐리티 설정파일에 SecurityService를 @Autowired로 의존성을 주입시킨다.
SecurityConfig.java
@EnableWebSecurity
public class SecurityConfig {
//스프링에서 제공하는 UserDetails 서비스의 loadUserByUsername 메소드를 구현한 서비스
@Autowired
private SecurityService securityService;
@Bean
public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
.... 생략
// 자동로그인 관리
.rememberMe( rememberMe ->
rememberMe
.rememberMeParameter("remember-me") //기본 파라미터명은 remember-me
.rememberMeCookieName("remember-me") // 브라우저에 저장된 쿠키 이름을 지정합니다.
.key("myAppKey") //토큰을 식별하기위한 키를 지정합니다.
.tokenValiditySeconds(3600) //default는 14일
.userDetailsService(securityService) //Remember me에서 시스템에 있는 사용자 계정을 조회할때 사용할 클래스
.authenticationSuccessHandler(customAuthenticationSuccessHandler())
)
}
2. UserDetails를 구현한 구현체 UserDetails의 username변수의 getter를 본인이 사용하는 아이디 변수로 지정한다.
//회원 DTO
@Data
@EqualsAndHashCode(of = "memberId")
public class MemberDTO implements UserDetails {
private static final long serialVersionUID = 1L;
private Long MemberNo;
private String memberId;
private String memberPwd;
...생략
//이것을 하지 않으면 remember-me 기능을 사용 할 수 없다
//loadUserByUsername메소드에서 사용하는 vo 변수를 username에 getter로 지정
@Override
public String getUsername() {
return id;
}
}
UserDetails를 구현한 구현체 에서 (MemberDTO.java) username getter를
loadUserByUsername 메소드에 조회 조건으로 사용하는 변수명으로 지정한다.
이제 어플리케이션 탭에 remember-me 쿠키가 생성됐다!
반응형