REST API - Security - Account Service AccountServiceTest 기존에 만들어둔 BaseControllerTest 클래스는 ServiceLayer에선 사용하지않는 MockMvc를 포함하고 있기때문에 상속하지 않는다. UserDetailsService를 구현하는 AccountService 테스트 AccountService loadUserByUsername() username(email) 에 해당하는 사용자를 찾는다. 없다면 UsernameNotFoundException 존재한다면 UserDetail 구현체인 User 객체를 반환한다. authorities() username에 해당하는 사용자를 찾아 해당 사용자의 권한을 SimpleGrantedAuthority로 변환한..
REST API - Security - Spring Security 웹 시큐리티 Filter 기반 메소드 시큐리티 특정 Method 가 호출됬을때 인증 권한 체크 AOP를 생각 Proxy를 사용하여 권한 체크 둘다 Security Interceptor 를 사용한다. Spring Security Cycle 1 사용자가 요청을 보낸다. GET /api/events 2 Servlet Filter 가 요청을 가로챈다. 3 Security Filter Interceptor 로 요청을 보낸다. Security Filter를 적용 유무 확인 4 SecuriyContextHolder에서 인증 정보 확인 ThreadLocal (한 쓰레드 내의 공유 저장소) 5-1 인증된 사용자가 없음 AuthenticationManag..
REST API - Security - Account 도메인 추가 현재 API는 문제가 존재함 인증 절차가 존재하지 않는다. 이벤트와 연관이있는 Account 를 가지는 사람만 수정 삭제가 가능해야하는데, 현재는 누구자 수정, 삭제가 가능함. Spring Security OAuth2 적용 password 라는 Grant Type 을 사용하여 적용 Account 도메인 필요 Account Account 도메인 id: 식별자 email: 이메일 password: 패스워드 roles: 권한 fetchType 을 EAGER로 설정한 이유 ? 1:N 관계 이기때문에 기본 fetch Type은 Lazy 이다. 하지만 Role의 개수가 적기도하고, 매번 권한이 필요하기 때문에 EAGER Fetch 사용 Account..
REST API - 테스트 코드 리팩토링 테스트 클래스 간의 중복되는 애노테이션과 필드들이 존재한다. 여러 컨트롤러 간의 중복코드 제거하기 상속을 사용하기 @Ignore 중복되는 클래스 EventControllerTest 클래스와, IntexControllerTest 클래스가 중복이 발생한다. Test를위한 애노테이션, MockMvc ... EventControllerTest.java IntexControllerTest.java 상속을 통해 해결 BaseControllerTest 라는 클래스를 만들어 테스트 클래스가 상속받도록 구조를 변경하자. @Ignore 테스트 클래스의 중복을 제거하지만 이는 중복을 제거하기 위한 상위 클래스이지 테스트 클래스가 아니다. 때문에 BaseControllerTest 클래..