Spring Security 인가 처리 - AccessDecisionManager, AccessDecisionVoter
2022. 8. 4. 18:35
Spring Boot
지난 포스팅에서 사용자가 누구인지, 인증 처리 하는 방법을 알아보았다. 사용자가 인증되었다면 이제 유저에 대한 권한을 확인하고 접근을 허가하는 인가 처리에 대해 알아보자. 각 컴포넌트를 설명하기 전에, 대략적인 구조는 위 그림과 같다. SecurityInterceptor 는 Invocation 을 생성하여 ConfigAttribute 에 담아 AccessDecisionManager 에게 인가 처리를 위임한다. DecisionManager 들은 해당 ConfigAttribute 를 가지고 DecisionVoter 들에게 이 조건을 처리해줄 수 있는지 질문한다. 답은 Voter 내의 supprots() 메서드에서 리턴받을 수 있으며, 처리가 가능하다면 vote() 메서드에서 승인 여부를 반환한다. 이제 각 ..
Spring Security 인증 처리 (2) Filter, AuthenticationManager, AuthenticationProvider, WebSecurityConfigure
2022. 7. 26. 22:04
Spring Boot
Spring Security Filter Spring Security는 서블릿 필터 체인을 통한 위임 모델을 구현한다. 가 무슨 뜻인지 알아보자. 서블릿 필터 서블릿 필터는 사용자의 request 또는 서버의 response 를 중간에서 가로채서 필터링하는 인터페이스로 init(), doFilter(), destory() 메서드가 있다. public interface Filter { default void init(FilterConfig filterConfig) throws ServletException { } void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletExcepti..
Spring Security 인증 처리 (1) Authentication, SecurityContextHolder
2022. 7. 23. 01:14
Spring Boot
Spring Security를 공부하기에 앞서 인증의 기본이 되는 Authentication 객체와 이를 저장하는 SecurityContextHolder에 대해 알아보겠습니다. Authentication 인증 된 사용자에 대한 상세 정보, 즉 통행증 역할을 한다. SecurityContextHolder 내부의 SecurityContext에 저장된다. Authentication을 구현하는 객체들은 대체로 메서드 이름 뒤에 AuthenticationToken이 붙는다. 이를 인증 토큰이라고 부른다. - 주요 용어 정리 Principal: 보호 된 리소스에 접근하는 사용자 식별자(아이디) Credentials: 인증을 위해 필요한 정보(비밀번호) GrantedAuthority: 인증 된 사용자의 인증 정보(역..
Swagger로 API 문서 자동화하기 +JWT 설정
2022. 5. 26. 23:58
Spring Boot
Swagger란? 빌드 시 자동으로 API Spec 문서를 생성해주는 라이브러리 핵심 기능 - API 기능 테스트를 수행할 수 있음 - 소스코드 빌드 시 문서 자동 최신화 의존성 추가 // Spring Boot 2.7.1 implementation "io.springfox:springfox-boot-starter:3.0.0" Swagger Configuration @Configuration public class Swagger2Configure { // Docket 설정 @Bean public Docket restApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) // optional .securitySchemes(sing..
[Spring Boot] JUnit5 로 테스트 하기
2022. 5. 25. 22:35
Spring Boot
간단한 CRUD를 Junit을 사용해서 테스트해보자. UserService 내에 사용자 조회, 가입 메소드가 구현되어 있는데, 내가 구현한 메소드들이 제대로 동작하는지 확인하는 테스트 코드를 작성해본다. @SpringBootTest @TestInstance(TestInstance.Lifecycle.PER_CLASS) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) class UserServiceTest { ... ... Test code ... ... } @SpringBootTest 스프링부트 어플리케이션 테스트 시 필요한 의존성 제공 사용자 가입, 조회 쿼리 테스트를 위해 전체 컨텍스트를 테스트에 올린다. @TestInstance 테스트 인스턴스 생성 단..
JWT 를 간단히 정리해보자
2022. 5. 17. 23:00
Spring Boot
JWT (JSON Web Token) 란? JSON 객체로 정보를 안전하게 전송하기 위한 방법 웹 토큰에 정보를 담아 사용자에게 권한을 부여하거나, 정보를 교환할 때 사용할 수 있다. JWT를 왜 사용할까? 우리가 주로 사용하는 REST API는 HTTP 프로토콜을 기반으로 서비스된다. http는 stateless 해서 상태를 저장하지 않는다. *자세한 내용은 아래 포스팅 참조 https://e-una.tistory.com/47 [Network] Socket 과 HTTP 프로토콜 안녕하세요. 오랜만에 전공책을 펴서 Socket과 HTTP에 대해 간단하게 정리해보려고 합니다. 네트워크 프로그래밍과 소켓 네트워크 프로그래밍이란? 네트워크로 연결되어 있는 서로 다른 두 컴퓨터 e-una.tistory.com ..
[Spring Boot] H2 DataBase
2022. 2. 14. 22:02
Spring Boot
안녕하세요. 오늘은 테스트 용도로 사용할 자바 기반의 in-memory RDBMS H2 DataBase Engine을 스프링 부트와 연동해보려고 합니다. http://www.h2database.com/html/main.html H2 Database Engine H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size Supp ww..
Spring Container & Bean (2)
2021. 8. 30. 23:54
Spring Boot
스프링 빈 조회 - 상속관계 부모 타입으로 조회하면 자식 타입도 함께 조회된다. 그래서 모든 자바 객체의 최고 부모인 Object 타입으로 조회하면, 모든 스프링 빈을 조회한다. public class ApplicationContextExtendsFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); @Test @DisplayName("부모 타입으로 조회 시 자식이 둘 이상이면 오류 발생") void findBeanByParentTypeDuplicate() { assertThrows(NoUniqueBeanDefinitionException.class, () -> ac..