Spring 40

[시큐리티] PasswordEncoder

1. PasswordEncoder 계약 1) 정의 계약을 구현해 스프링 시큐리티에 사용자 암호를 검증하는 방법을 알려줄 수 있음 인증 프로세스에서 암호가 유효한지를 확인 2) 인터페이스 코드로 계약 구현 public interface PasswordEncoder { String encode(CharSequence rawPassword); boolean matches(CharSequence rawPassword, String encodedPassword); default boolean upgradeEncoding(String encodedPassword){ return false; } } encode 및 matches 메서드는 계약의 책임을 정의 encode 주어진 문자열을 변환해 반환 암호화 수행 mat..

Spring/security 2023.03.15

[시큐리티] UserDetailsService

1. UserDetails 1) 개념 스프링 시큐리티가 관리하는 사용자를 나타냄 2) 특징 하나 이상의 권한을 가짐 UserDetails 계약을 구현해서 프레임워크가 이해할 수 있게 사용자를 기술 3) UserDetails 인터페이스 코드 public interface UserDetails extends Serializable { // 인증과 관련된 세부 정보, 사용자 자격 증명을 반환하는 메서드 String getUsername(); // 사용자 이름 반환 String getPassword(); // 사용자 암호 반환 // 사용자가 애플리케이션의 리소스에 접근할 수 있도록 권한 부여하기 위한 메서드 Collection

Spring/security 2023.03.13

[시큐리티] 구성 요소 재정의

1. 방법 직접 구현 만들기 스프링 시큐리티에 있는 구현 이용하기 2. UserDetailsService 재정의 1) 방법 빈으로 재정의 configure 메서드로 설정 2) InMemoryUserDetailManager 이용 특징 콘솔에 자동 생성된 암호가 출력되지 않고 메모리에 자격 증명을 저장해서 스프링 시큐리티가 요청을 인증할 때 이용할 수 있게 한다 3. PasswordEncoder 재정의 1) 방법 빈으로 재정의 configure 메서드로 설정 2) NoOpPasswordEncoder 이용 특징 NoOpPasswordEncoder는 암호에 암호화나 해시를 적용하지 않고 일반 텍스트처럼 처리한다. 그래서 운영 단계에서 사용하면 안 되기 때문에 클래스 개발자가 deprecated라고 지정해놓음. ..

Spring/security 2023.03.10

[시큐리티] 인증 방법

1. http basic 인증 1) 개념 2) 방법 username:password 문자열을 Base64로 인코딩한다 Authorization 헤더의 값으로 Basic + 위의 인코딩값을 설정하고 보낸다 3) 설정 @Configuration public class ProjectConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception{ http.httpBasic(); http.authorizeRequests().anyRequest().authenticated(); } } 4) 특징 자격 증명의 기밀성을 보장하지 않는다 base64는 단지 전송의 편의를 위한..

Spring/security 2023.03.10

[시큐리티] 스프링 시큐리티 인증 프로세스 구성 요소

1. 스프링 시큐리티의 인증 프로세스에 포함된 주 구성 요소와 관계 1) 인증 필터 인증 요청을 인증 관리자에 위임하고 응답을 바탕으로 보안 컨텍스트를 구성한다 2) 인증 관리자 인증 공급자를 이용해 인증을 처리한다 3) 인증 공급자(AuthenticationProvider) 인증 논리를 구현한다 사용자 관리 책임을 구현하는 사용자 세부 정보 서비스(UserDetailService)를 인증 논리에 이용한다 암호 관리를 구현하는 암호 인코더(PasswordEncoder)를 인증 논리에 이용한다 4) 보안 컨텍스트 인증 프로세스 후 인증 데이터를 유지한다 2. UserDetailsService 1) 개념 사용자 이름으로 사용자 세부 정보를 검색하는 객체 2) 하는 일 사용자에 관한 세부 정보를 관리 인증 공..

Spring/security 2023.03.10

[시큐리티] 스프링 시큐리티 기본 개념 및 보안에 대한 개념

1. 스프링 시큐리티 개념 스프링 애플리케이션에 보안을 적용하는 과정을 크게 간소화하는 프레임워크 2. 스프링 시큐리티 방법 어노테이션, 빈, 메서드 등 스프링 방식의 구성 스타일을 이용해서 애플리케이션 수준의 보안을 정의한다 보안을 구성하는 방법은 본인 하기 나름이다. 간단하게 할 수도 있고, 복잡하게 할 수도 있다 보통, 누가 작업을 수행할 수 있는지 결정(인증), 특정 사람이 특정 데이터를 이용할 수 있는지 결정(권한), 데이터 전송 및 저장 과정에서 올바른 전송 및 저장인지 결정하는 방식 사용 인증: 애플리케이션이 사용자를 식별하는 방법 권한 부여: 사용자 식별 후 나중에 이들이 무엇을 하도록 허용해야 하는지 결정 3. 보안이란 애플리케이션은 전화번호, 이메일 주소, 신용카드 번호 등의 정보에 접..

Spring/security 2023.03.09

[시큐리티] 초기 세팅

1. 프로젝트 생성 자바 11, 스프링 부트 2.x spring dev tools, spring data jpa, spring security, lombok, mustache, mysql driver, spring web 2. application.properties ## server server.address=localhost server.port=8080 server.servlet.context-path=/ //연결될 url 설정 // 인코딩 설정 server.servlet.encoding.charset=UTF-8 server.servlet.encoding.enabled=true server.servlet.encoding.force=true ## my sql spring.datasource.url=j..

Spring/security 2023.03.09

[테스트 코드] 테스트 코드 작성 문법

https://www.baeldung.com/introduction-to-assertj 1. Assertions.assertThat(something) 1) 개념 something에 객체, 컬렉션, 스트링 등을 담아 놓고 뒤에 체인 방법으로 다른 메서드를 달아 그 메서드에 맞는지 아닌지를 검증 할 수 있게 해 준다. 2) 방법 Assertions.assertThat("abc").isLowerCase() //소문자인지 확인후 소문자가 맞으면 테스트 성공, 아니면 테스트 실패 2. assertThat(객체) 1) isEqualTo 객체의 값이 같은지 비교

Spring/test 2023.03.08

[테스트 코드] 테스트 코드 관련 어노테이션

1. @SpringBootTest 1) 개념 통합 테스트를 위한 환경을 준비해준다. 모든 빈들을 스캔하고 애플리케이션 컨텍스트를 생성하여 테스트를 실행. 2. @Transactional 1) 개념 각각의 테스트를 실행할 때마다 트랜잭션을 시작하고 테스트가 끝나면 트랜잭션을 강제로 롤백한다. 따라서 테스트를 진행하면서 데이터베이스에 저장한 데이터가 테스트가 끝나면 롤백되므로 반복해서 테스트를 진행할 수 있다. 3. @Autowired 1) 개념 의존 관계를 자동으로 주입해준다 4. @Test 1) 개념 테스트를 수행하는 메소드를 의미. 각각의 테스트가 서로 영향을 주지 않고 독립적으로 실행됨을 원칙으로 @Test마다 객체를 생성. 5. @WebMvcTest 1) 개념 스프링은 특정 부분만 테스트할 수 있는..

Spring/test 2023.03.08