728x90
스프링 기반 REST API 개발
5. REST API 보안 적용
포스팅 참조 정보
GitHub
공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다
해당 포스팅에 대한 내용의 GitHub 주소
실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다
해당 포스팅 참고 인프런 강의
https://www.inflearn.com/course/spring_rest-api/dashboard
실습 환경
- Java Version: Java 11
- SpringBoot Version: 2.1.2.RELEASE
5. 스프링 시큐리티 폼 인증 설정
HttpSecurity configure 메서드를 재정의하면 얼마든지 마음대로 스프링 시큐리티 설정이 가능함
로그인 페이지나 여러 설정이 가능하지만 스프링 시큐리티 최신버전은 기본 폼인증 페이지를 제공
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.anonymous() //익명사용자 허용
.and()
.formLogin() //폼 인증 사용
.and()
.authorizeRequests() //허용할 요청
.mvcMatchers(HttpMethod.GET, "/api/**").anonymous() // /api/ 경로의 모든걸 익명사용자에게 허용
.anyRequest().authenticated(); // 나머지는 인증이 필요
}
- 익명 사용자 사용 활성화
- 폼 인증 방식 활성화
- 스프링 시큐리티가 기본 로그인 페이지 제공
- 요청에 인증 적용
/api
이하 모든GET
요청에 인증이 필요함- (
permitAll()
을 사용하여 인증이 필요없이 익명으로 접근이 가능케 할 수 있음) - 그밖에 모은 요청도 인증이 필요함
기존설정 수정
AccountService 수정
PasswordEncoder
를 통해 인코딩한 패스워드를 저장하도록 수정
@Autowired
PasswordEncoder passwordEncoder;
public Account saveAccount(Account account) {
account.setPassword(this.passwordEncoder.encode(account.getPassword()));
return this.accountRepository.save(account);
}
AccountServiceTest findByUsername 테스트 수정
accountService로 저장하도록 수정
...
@Autowired
PasswordEncoder passwordEncoder;
@Test
@TestDescription("유저 인증 테스트")
public void findByUsername() {
...
this.accountService.saveAccount(account);
...
// 입력한 패스워드와 DB에 저장된 패스워드와 매칭하는지 테스트하는 로직 수정
assertThat(this.passwordEncoder.matches(password, userDetails.getPassword())).isTrue();
}
...
AppConfig 에 테스트용 계정정보 저정하는 applicationRunner 메서드 추가
@Bean
public ApplicationRunner applicationRunner() {
return new ApplicationRunner() {
@Autowired
AccountService accountService;
@Override
public void run(ApplicationArguments args) throws Exception {
Account freelife = Account.builder()
.email("freelife@gmail.com")
.password("freelife")
.roles(Set.of(AccountRole.ADMIN, AccountRole.USER))
.build();
accountService.saveAccount(freelife);
}
};
}
728x90
'개발강의정리 > Spring' 카테고리의 다른 글
[스프링 기반 REST API 개발] 5-7. 스프링 시큐리티 OAuth 2 설정: 리소스 서버 설정 (0) | 2020.04.07 |
---|---|
[스프링 기반 REST API 개발] 5-6. 스프링 시큐리티 OAuth 2 설정: 인증 서버 설정 (0) | 2020.04.06 |
[스프링 기반 REST API 개발] 5-4. 스프링 시큐리티 기본 설정 (0) | 2020.04.04 |
[스프링 기반 REST API 개발] 5-3. 예외 테스트 (0) | 2020.04.03 |
[스프링 기반 REST API 개발] 5-2. 스프링 시큐리티 적용 (0) | 2020.04.02 |
댓글