728x90 반응형 Spring136 SpringSecurity 와 JWT 의 구조, 동작 과정 인증 : 해당 사용자가 본인이 맞는지 확인 인가 : 인증된 사용자가 요청한 자원에 접근 가능한지 권한 확인 Principal (접근주체) : 보호받는 Resource 에 접근하는 대상 Credential (비밀번호) :Resource 에 접근하는 대상의 비밀번호 인증 -> 인증 성공 후 -> 인가 인증과 인가를 위해 principal 을 아이디로, Credential 을 비밀번호로 사용한다. 스프링 시큐리티의 구조 1. AuthenticationFilter 에서 Http 요청을 받는다. 2. 해당 부분에서는 request 로 부터 username, password 를 가지고 와서 UsernamePasswordAuthenticationToken을 생성한다. 3. 생성된 UsernamePasswordAuth.. 2022. 10. 23. SpringSecurity DB 없이 테스트 방법 1. 기본인증 -> 처음 애플리케이션 시작하면 콘솔에 있는 랜덤 비밀번호 사용 Id : user (고정) password : 콘솔창 확인 2. yml에 사용자 추가하기 application.yml 에 사용자 추가하기 spring: security: user: name: user1 password: 1234 roles: USER 3. UserDetailsService 서비스 빈을 추가하기 USER , ADMIN 으로 테스트하기 위해서는 yml 에 추가하는 것으로는 불가능 서비스빈을 사용해 여러명을 등록 설정추가 ( @Configuration , @Bean 사용 ) @Configuration //설정 정보를 추가해준다 public class SecurityRoleTest { @Bean // 스프링 컨테이너에.. 2022. 10. 20. JWT (Json Web Token) 의 개념 JWT 는 당사자간의 정보를 JSON 객체로 안전하게 전송하기 위한 방법이다. 헤더 - Header 어떤 알고리즘이 사용되었는지 유형은 무엇인지 확인할 수 있다. 헤더에 있는 알고리즘으로 Signature에서 사용한다. 알고리즘은 SHA256 또는 RSA 를 대중적으로 사용한다. RSA 는 비대칭키 암호화 방식을 사용해 잠금한다. 공식홈페이지 예시로는 HS256 알고리즘을 사용하며, 유형은 JWT 라는 것을 알 수 있다. 페이로드 - Payload 민감한 정보를 담으면안된다. JWT 를 가지고 디코딩을 하면 해당 값을 모두 알 수 있기 때문이다. 클레임을 포함하고 있다 클레임이란 사용자 및 추가 데이터에 대한 설명을 의미한다. 구성된 페이로드는 Base64Url로 인코딩된다. 클레임은 3가지로 나뉜다. .. 2022. 10. 19. 세션(서버) 기반 VS 토큰 기반 차이 인증 (Authentication) : 사용자가 맞는지 확인 -> 로그인 인가 (Authorization) : 권한부여 -> 자신이 작성한 글 확인 등 ( 인증 이후 ) 1. 세션기반 인증 세션 기반 인증은 서버 기반의 인증방식이다. 따라서 서버 측에서 사용자들의 정보를 기억하고 있어야 하므로 stateful 한 구조를 갖는다. 사용자들의 정보를 기억하기 위해서는 사용자의 정보를 메모리에 저장한다. 클라이언트는 쿠키저장소에 서버로부터 받은 SessionID 를 저장한다. 장점으로는, 토큰방식처럼 signiture 등등 부가적인 정보가 없기 때문에, 주고받는 데이터가 적다 단점으로는, 서버에서 직접 정보를 저장하기 때문에, 정보를 저장하는데 한계가 있다. 하드디스크나 DB에 저장하기에는 작업이 느리고, 무.. 2022. 10. 19. @OneToOne 는 1:1 을 보장하지않는다 + unique 제약조건 @OneToOne ( 1:1 ) 매핑을 하면 데이터 입력 시 1:1 을 보장할까?? 위의 내용에 대해 테스트를 해보았다. Member 클래스, Locker 클래스가 있다. 조건은 Member 1명당 1개의 Locker만 사용할 수 있다. Member 클래스가 연관관계의 주인이 되며, Locker 클래스에서는 mappedBy를 사용해 양방향으로 연결해준다. 테스트 내용 : 1명의 락커에 1명 이상의 멤버가 들어가는지 확인한다. public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String username; @OneToOne @JoinColumn(name = "locker_id") priv.. 2022. 10. 17. 빈을 등록하기 위한 방법 @Configuraion, @Bean, @Component Spring IOC 컨테이너가 관리하는 자바 객체를 빈(Bean) 이라고 부른다. 일반적인 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 제어하고,객체를 직접 생성하고 조작을 했다. Class 를 생성하고 new 를 입력해서 원하는 객체를 직접 생성 후 사용했다. 즉 , 모든 작업자가 제어하는 구조로 흘러갔다. IOC(제어의역전) 가 적용될 경우, 객체의 생성을 특별한 주체에 맡긴다. 이러한 경우, 사용자는 객체를 직접 생성하지 않으며, 사용자가 제어권을 다른 주체에 넘긴다. new 를 이용하여 생성된 객체가 아니라, Spring에서 관리되는 자바 객체를 사용한다. Spring 에 의해 생성되고 관리되는 자바 객체를 Bean 이라고 한다. Bean 은 싱글톤으로 관리된다 @Configuration +.. 2022. 10. 14. DispatchServlet(디스패처 서블릿) 에 대해 알아보자. DispatchServlet 의미 (Dispatch = 파견, 보내다) http 에서 들어온 모든 요청을 가장 앞단에서 받아 적합한 컨트롤러에 위임하는 프론트 컨트롤러이다. * 프론트 컨트롤러 : 서블릿 컨테이너의 제일 앞단에서 서버에 들어오는 클라이언트의 모든 요청을 받아 처리하는 컨트롤러 요청을 받아 어떤 controller 에게 위임을 할지 handlerMapping 을 통해 확인 후 HandlerAdapter를 통해 위임을 진행한다. Spring MVC 는 디스패처 서블릿이 등장함에 따라, web.xml 에서 각각 url 매핑을 등록하던 작업을 스킵하고 모든 요청을 핸들링하고 공통작업을 처리하면서 편리하게 이용이 가능해졌다. 모든 요청을 디스패처 서블릿이 받아 편리해진 것은 사실이다. 하지만, 이.. 2022. 10. 14. @Controller 와 @RestController 의 원리 @Controller 해당 어노테이션의 목적은 Model 객체를 만들어 데이터를 담고 view를 반환하기 위함이다. 아래와 같은 과정으로 요청과 응답이 진행된다. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Controller 클라이언트에서 uri 형식을 통해 요청을 보낸다. DisPathcherServlet 에서 해당 요청을 받아 HandlerMapping 을 통해 위임할 Controller를 찾는다. Controller 에서는 비즈니스 로직을 진행하여 데이터를 받는다. HandlerAdapter는 View Name을 받아 DispatcherServlet 에게 전달.. 2022. 10. 13. @valid 를 사용해보자 (유효성 검사) https://josteady.tistory.com/683 유효성 검사(Validation) 유효성 검사 / 데이터 검증 (Validation) - 서비스의 비즈니스 로직이 옳바르게 동작하기 위해 사용되는 데이터에 대한 사점 검증하는 작업 - 데이터의 검증은 여러 계층에서 발생 - 데이터에 대 josteady.tistory.com 해당 포스팅에 이어 게시판관련 프로젝트를 만들면서 알게된점과 사용한 코드에 관해 정리하려고 한다. 아직 유효성검증 관련해서 궁금하고 미흡한 부분이 많아, 게시판(post) 관련해서 간단하게 작성했다. @Getter @Setter @NoArgsConstructor public class CreatePostDto { @NotBlank(message = "제목은 필수 값입니다.") .. 2022. 10. 13. 이전 1 ··· 6 7 8 9 10 11 12 ··· 16 다음 728x90 반응형