TemplateInputException (해당 템플릿을 찾을 수 없습니다.)
로그인, 회원가입 폼을 만들다 TemplateInputException 이 발생했다.
타임리프가 해당 템플릿 파일을 찾을 수 없다는 에러였다.
원인이 뭔지 찾다가 해당 클래스에 @RestController 를 붙이면 해결된다는 말을 들었다.
그런데 현재 내 컨트롤러는 뷰단을 반환해야 하는 경우도 있기에 @RestController 는 쓸 수 없었다.
이에 해당 API에 @ResponseBody를 붙이니 해결되었다.
spring-dotenv
application.properties 파일에 내 DB에 관한 정보가 들어있다.
이를 .env 파일로 빼서 쓰고 싶은데 spring 기반에선 dotenv 라는 라이브러리를 사용해야 .env를 인식한다고 한다.
implementation 'io.github.cdimascio:dotenv-java:2.2.0'
이 코드를 build.gradle 에 추가하고 로드하자.
라이브러리가 다운이 완료되었으면 프로젝트 루트 디렉토리에 .env 파일을 생성하고
알맞은 변수명에 해당 정보를 기입한다.
main 메서드에서 dotenv 를 실행하고 .env 의 정보들을 환경변수로 설정하자.
// .env 파일 로드
Dotenv dotenv = Dotenv.load();
// .env 안의 값들을 시스템 환경변수로 설정
System.setProperty("DB_URL", dotenv.get("DB_URL"));
System.setProperty("DB_USERNAME", dotenv.get("DB_USERNAME"));
System.setProperty("DB_PASSWORD", dotenv.get("DB_PASSWORD"));
System.setProperty("DB_DRIVER_CLASS", dotenv.get("DB_DRIVER_CLASS"));
spring.application.name=userJoin
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
spring.datasource.driver-class-name=${DB_DRIVER_CLASS}
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.hibernate.ddl-auto=update
spring.thymeleaf.prefix=classpath:/templates/
환경 변수로 설정이 끝났다면, application.properties 파일에 위처럼 변수화된 정보로 내 정보를 가릴 수 있다.
Bcrypt
회원가입을 진행할 때, 비밀번호를 그대로 DB에 저장시키면 보안적으로 상당히 위험하다.
그렇기에 Bcrypt 같은 암호화 라이브러리를 사용해 암호화 시킨 비밀번호를 DB에 저장한다.
이를 사용하려면 spring-security 를 사용하거나 그 안의 Bcrypt 모듈만 빼서 사용할 수 있다.
일단 난 spring-security 를 사용했다.
implementation 'org.springframework.boot:spring-boot-starter-security'
build.gradle 에 라이브러리를 추가해주고
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// csrf 끄기
http.csrf((csrf) -> csrf.disable());
http.authorizeHttpRequests((authorize) ->
authorize.requestMatchers("/**").permitAll() // 해당 url에 로그인 여부 지정 가능 // premitAll() 모두 해제
);
return http.build();
}
}
SecurityConfig 라는 클래스를 프로젝트에 생성한다.
난 직접 로그인, 회원가입을 만들 예정이라 csrf는 껐다.
("/url").permitAll() - /url 에 로그인 여부가 상관없이 모든 사용자가 접근할 수 있게 하는 메서드
기존 글에도 Bcrypt, RSA를 다룬 글이 있긴한데 인강 없이 혼자 해보는 중
PC 사이즈
태블릿 및 모바일 사이즈
'spring boot' 카테고리의 다른 글
JPA / spring boot (로그인 구현, RSA) (0) | 2024.09.17 |
---|---|
JPA / spring boot (spring security, 회원가입 && 로그인 기능 feat. Bcrypt, RSA) (0) | 2024.08.22 |
JPA / spring boot (session, token, oauth) (0) | 2024.08.19 |
JPA / spring boot (JPA , ORM, Hibernate) (0) | 2024.08.19 |
JPA / spring boot (JPA , ORM, Hibernate) (0) | 2024.08.11 |