본문 바로가기
728x90
반응형

🍃SpringFramework80

[SpringSecurity] Spring Security란? 💡 필요 이유 웹사이트는 각종 서비스를 하기 위한 리소스와 서비스를 사용하는 유저들의 개인 정보를 가지고 있다. 이들 리소스를 보호하기 위해서 일반적으로 웹 사이트는 두가지 보안 정책을 설정해야 한다. [서버 리소스, 유저들의 개인정보] 💡 인증 (Authentication) 사이트에 접근하는 사람이 누구인지 시스템이 알아야 한다. 익명사용자(anonymous user)를 허용하는 경우도 있지만, 특정 리소스에 접근하거나 개인화된 사용성을 보장 받기 위해서는 반드시 로그인하는 과정이 필요하다. 로그인은 보통 username / password 를 입력하고 로그인하는 경우와 sns 사이트를 통해 인증을 대리하는 경우가 있다. [UsernamePassword 인증] Session 관리 토큰 관리 (sessi.. 2023. 9. 10.
[SpringSecurity] Session 사용하기 1. UserDetailService 데이터베이스에서 회원정보를 가져오는 인터페이스 loadUserByUsername() 메소드를 통해 회원 정보를 조회 → 사용자의 정보와 권한을 갖는 UserDetails 인터페이스를 반환 2. UserDetails 회원 정보를 담는 인터페이스 직접 구현하거나 스프링 시큐리티에서 제공하는 User 클래스 사용(구현체) 3. MemberService 로그인/로그아웃 구현 MemberService.java UserDetailsService 인터페이스를 구현하고 loadUserByUsername() 메소드 오버라이딩 Builder 패턴을 이용하여 UserDetail 인터페이스를 구현한 User 객체 생성 후 반환 //implements해놨으니까 추상메소드 구현 @Overri.. 2023. 9. 10.
[SpringSecurity] JwtToken 사용하기 Jwt Token 로그인 💡 Use Case Specification (명세서) 우선 login, join을 제외한 페이지를 전부 막는다. 사용자가 login하면 id, pw를 검증하고 Token을 생성하여 발급한다. 발급 받은 Token 권한에 따라 해당 페이지를 접근할 수 있다. https://github.com/Lib0823/SpringSecurity-JWT_study.git 💡 [build.gradle] implementation 'io.jsonwebtoken:jjwt:0.9.1' implementation 'javax.xml.bind:jaxb-api:2.3.0' implementation 'org.springframework.boot:spring-boot-starter-security' Sour.. 2023. 9. 10.
[SpringSecurity] 에러 노트 SpringSecurity 사용 중 발생한 에러를 정리하는 곳입니다. Adapter 사용 에러에러 코드- ‘WebSecurityConfigurerAdapter' 사용 불가발생 원인- WebSecurityConfigurerAdapter 가 Deprecated  되었으니 SecurityFilterChain 를 Bean 으로 등록해서 사용해야 한다.해결 방법- ‘https://devlog-wjdrbs96.tistory.com/434 Matcher 사용 에러에러 코드- anthorizeRequests()와 antMatcher() 사용 불가발생 원인- HttpSecurity가 authorizeRequests()를 deprecate 해서 사용할 수 없음.해결 방법- authorizeHttpRequests().re.. 2023. 9. 10.
[JPA] 주요 개념 트랜잭션(Transaction) 데이터베이스를 다룰 때 트랜잭션을 적용하면 데이터 추가, 갱신, 삭제 등으로 이루어진 작업을 처리하던 중 오류가 발생했을 때 모든 작업들을 원상태로 되돌릴 수 있다. 모든 작업들이 성공해야만 최종적으로 데이터베이스에 반영하도록 한다. 즉 데이터를 추가, 수정, 삭제 시킬 때 바로 DB에 반영 하지 않고 영속성 캐시에 담아뒀다 한번에 반영 하게 된다. UPDATE JPA는 Update 메서드를 따로 제공하고 있지 않다. 그렇기에 Service로직에 @Transactional 어노테이션을 붙이고, Entity데이터를 조회 후 set() 하여 Entity의 데이터를 수정만 하면 데이터베이스에 대한 연산?작업이 끝날 때 @Transactional 어노테이션에 의해 Entity의 .. 2023. 9. 10.
[JPA] 고아 객체 제거(OrphanRemoval) JPA는 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제한다. 💡 OrphanRemoval 고아가 된 값을 제거하는 속성이다. 즉, 연관관계를 가지고 있는 상위 Entity에서 값이 제거될 때 해당 Entity를 참조하고 있던 하위 Entity의 값도 제거한다. default값이 false고 true로 지정하면 적용된다. Ex> @OneToMany(orphanRemoval = true) @JoinColumn(name = “publisher_id”) private List books = new ArrayList(); 2023. 9. 10.
[JPA] Cascade. 영속성 전이 💡 cascade ‘종속’되다는 의미로 서로 관계가 있는 테이블의 속성에 대한 값을 종속 즉, insert, update 등이 같이 실행되어 값이 똑같이 유지되게 한다. [Option] ALL ⇒ 모든 Cascade옵션을 적용 (모르겠으면 ALL적용) PERSIST ⇒ entity를 영속 상태로 만들면, 매핑된 entity도 함께 영속 상태가 됨 (insert) MERGE ⇒ 준영속 상태의 entity를 영속 상태로 만들면, 매핑된 entity도 모두 영속 상태가 됨 (save) REMOVE ⇒ entity를 제거하면 매핑된 entity도 모두 제거 REFRESH ⇒ entity를 다시 읽어올 때, 매핑된 entity도 모두 다시 읽어옴 DETACH ⇒ entity를 준영속 상태로 만들면, 매핑된 ent.. 2023. 9. 10.
[JPA] JPA - MySQL 연동 💡 JPA와 MySQL을 연동하여 사용해보자! 1. 우측 상단 메뉴바의 Database → ‘+’버튼 → DataSource → MySQL → root(pw) 입력하고 OK 2. application.yml 파일에 정의 spring: h2: console: enabled: true jpa: show-sql: true properties: hibernate: format_sql: true generate-ddl: true hibernate: ddl-auto: create-drop datasource: url: jdbc:mysql://localhost username: root password: sql: init: mode: always 3. build.gradle 파일에 코드 추가 implementatio.. 2023. 9. 10.
[JPA] 1:N Relation. 관계 설정 [1:1] 관계와 거의 유사하지만 하나의 User가 여러 UserHistory를 가질 수 있는 관계이다. [1:N], [N:1] 관계는 상황에 따라 둘다 걸어 양방향에서 참조가 가능하게 할 수 도 있고 한쪽 방향에서만 걸어줄 수도 있다. 💡 1:N 릴레이션 (주 테이블) 매우 간단하다. (기본적인 것은 1:1 릴레이션 참고!) @OneToMany 어노테이션을 붙여준다. 1:1 관계에서 주 테이블(User)에서 대상 테이블(UserHistory) 타입의 속성을 선언했다면, 1:N 관계에서는 대상 테이블(UserHistory)타입을 갖는 List타입으로 속성을 선언해주면 된다. (UserEntity) @OneToMany(fetch = FetchType.EAGER) @JoinColumn(name = "user.. 2023. 9. 10.
728x90
반응형