- pom.xml 의존성 추가
- 파일 준비
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
httpSecurity
// .csrf(AbstractHttpConfigurer::disable) // CSRF 비활성화
.csrf(Customizer.withDefaults()) // CSRF 기본 설정 사용
.httpBasic(Customizer.withDefaults()) // HTTP 인증 활성화
.formLogin(Customizer.withDefaults()) // 폼 로그인 활성화
// 접근 제어 설정 (모든 요청에는 인증이 되어야만 요청 처리)
.authorizeHttpRequests(authorizationRequests ->
authorizationRequests.anyRequest().authenticated()
);
return httpSecurity.build();
}


인증된 사용자 찾기
전달 받은 정보를 통해 사용자를 찾아 Userdetails 객체를 생성 후 반환한다.
userdetail service 암호가져와서 AuthenticationProvider가 비교
@Bean
public UserDetailsService userDetailsService() {
// 인 메모리 방식 설정 (테스트 용도로 사용 메모리가 휘발성이라 실제 서비스에서 사용 불가)
UserDetails user = User.builder()
.username("user")
// 패스워드 사용 시 암호화 안하고 그냥 한다
.password("{noop}1234")
.roles("USER")
.build();
UserDetails admin = User.builder()
.username("admin")
.password("{noop}5678")
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user);
}
}

// login 경로에 대한 요청은 누구나 허용 .requestMatchers("/login").permitAll() // 그 외 모든 요청은 인증 필요 .anyRequest().authenticated()

key remember-me 쿠키를 검증할 때 사용할 서명용 키tokenValiditySeconds(1209600) 쿠키 유효기간 초 단위 설정httpSecurity
// 기억하기 기능
.rememberMe(rememberMe -> rememberMe
.key("beyond") // 쿠키의 값을 암호화 하는 키 값을 설정
.tokenValiditySeconds(1209600) // 쿠키의 유효시간을 지정(초)
);



UserDetailsService
UserDetails
매번 랜덤한 솔트 값을 가지고 암호화하기 때문에 매번 다른 값으로 암호화한다.
@Slf4j
@Controller
public class AuthController {
@Autowired
private PasswordEncoder passwordEncoder;
@GetMapping("/login")
public ModelAndView login(ModelAndView modelAndView) {
System.out.println(passwordEncoder.encode("1234"));
System.out.println(passwordEncoder.encode("5678"));
log.info("로그인 페이지 요청");
modelAndView.setViewName("auth/login");
return modelAndView;
}
