Spring Boot3 & Spring Framework 6 강의 ::Section.7 JPA H2 데이터 베이스와 연결하기

suragryen·2024년 3월 4일
0

Udemy-Spring

목록 보기
13/25

SecurityFilterChain

기본값이 셋팅 돼 있기 때문에 h2데이터 베이스와 연결 했을 때 오류가 난다.

  1. All URLs are protected
  2. A login form is shown for unauthorized requests 승인되지 않은 요청에 대해서 로그인 양식 표시
    CSRF disable -> H2Database에 접근하려면 CSRF를 비활성 해주어야 한다.
  1. springSecuriryConfigure.java
import static org.springframework.security.config.Customizer.withDefaults;
//Spring Security 구성에 대한 기본 설정을 적용하는 데 사용
//명시적으로 구성을 지정하지 않고도 일반적인 보안 구성을 간편하게 적용


@Bean
	public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
		
		//HttpServeltRequest에 매칭될 수 있는 필터 체인을 정의
		// 웹요청이 들어오면 언제나 이 체인이 먼저 처리 한다
		//ex ) 로그아웃 상태로 페이지를 요청하면 로그인 폼이 뜨는 것 
		
		http.authorizeHttpRequests(
				auth -> auth.anyRequest().authenticated());
		http.formLogin(withDefaults());
		http.csrf().disable();
		http.headers().frameOptions().disable();
		return http.build();
		//command + shift + t 
		//command + o		
	}
	
	
  1. application.properties
spring.datasource.url=jdbc:h2:mem:testdb
#소스 초기화 지연  
spring.jpa.defer-datasource-initialization=true
  • 엔터티가 먼저 생성될 수 있게 소스 초기화를 지연시킨다

3.Todo.java

@Entity
public class Todo {
	public Todo() {
		
	}
    

	@Id
	@GeneratedValue
	private int id;
	
	private String username;
	
	@Size(min = 10, message="Enter at Enter at least 10 character")
	private String description;
	private LocalDate targetDate; 
	private boolean done;
  • 어노테이션으로 테이블과 컬럼 설정.
  • 생성자가 없으면 에러 발생하니까 꼭 만들어 줄 것!
  1. data.sql

  • sql 파일을 생성해주고 쿼리문을 작성해준다

  1. TodoRepository.java
package com.in28minnutes.springboot.myfirstwebapp.todo;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;

public interface TodoRepository extends JpaRepository<Todo, Integer>{
	
	public List<Todo> findByUsername(String username);
	
}

뷰에 출력하기 위해서 JPA REPOSITORY를 생성해준다.

  1. Controller
public class TodoControllerJpa {
	

	
	public TodoControllerJpa(TodoService todoService, TodoRepository todoRepository) {
		super();
		this.todoService = todoService;
		this.todoRepository = todoRepository;
	}
	
	private TodoService todoService;
	private TodoRepository todoRepository;
	


	// /list-todos
	@RequestMapping("list-todos")
	public String listAllTodos(ModelMap model) {
		String username = getLoggedInUsername(model);
		List<Todo> todos = todoRepository.findByUsername(username);
		model.addAttribute("todos",todos);
		
		//todoRepository.getById(1);//select
		
		return "listTodos";
	}

  • 쿼리문이 성공적으로 동작하였다🗽

Controller에 연결하기 (select, delete, update)

  1. select
	// /list-todos
	@RequestMapping("list-todos")
	public String listAllTodos(ModelMap model) {
		String username = getLoggedInUsername(model);
		List<Todo> todos = todoRepository.findByUsername(username);
		model.addAttribute("todos",todos);
		
		//todoRepository.getById(1);//select
		
		return "listTodos";
	}
  1. delete
	@RequestMapping("delete-todo")
	public String deleteTodo(@RequestParam int id) {
		
		todoRepository.deleteById(id);
		//todoService.deleteById(id);
		return "redirect:list-todos";
	}
  1. update
	@RequestMapping(value = "update-todo", method = RequestMethod.GET)
	public String showUpdateTodoPage(@RequestParam int id, ModelMap model) {
		
		Todo todo = todoRepository.findById(id).get();
		
		System.out.println(todo.toString());
		model.addAttribute("todo", todo);
		return "todo";
	}
	
	@RequestMapping(value="update-todo", method = RequestMethod.POST)
	public String updateTodo(//@RequestParam String description,
								ModelMap model, @Valid Todo todo, BindingResult result) {
		
		if(result.hasErrors()) {
			return "todo";
		}
		
		String username = getLoggedInUsername(model);
		todo.setUsername(username);
		todoRepository.save (todo);
		
		return "redirect:list-todos";
	}
profile
블로그 이사중 ☃︎

0개의 댓글

관련 채용 정보