[SpringBoot + Security + JWT + JPA ] 회원가입 , 로그인 구현하기-1
IDE : IntelliJ
https://start.spring.io/ 에서 프로젝트를 다음과 같이 생성해준다.
스프링 버전은 2.7.8로 해주었다.
build.gradle 에 dependancy는 다음과 같이 설정해준다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2:1.4.197'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
compileOnly "org.springframework.boot:spring-boot-devtools"
//JWT Dependency
implementation 'io.jsonwebtoken:jjwt:0.9.1'
}
application.properties 는 application.yml로 변경하고 내용은 다음과 같다.
spring:
jpa:
show_sql: true
hibernate:
dialect: org.hibernate.dialect.MySQL57Dialect
ddl-auto: create
generate-ddl: true
datasource:
hikari:
jdbc-url: jdbc:h2:~/test
h2:
console:
enabled: true
config 패키지를 만들고 SecurityConfig.java 클래스를 생성해준다.
그리고 web 패키지를 만들어 IndexController.java 클래스를 생성한다.
SecurityConfig.java
@RequiredArgsConstructor
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf().disable() //1
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) //2
.and()
.formLogin().disable()
.httpBasic().disable()
.authorizeRequests()
.antMatchers("/index/**","/h2-console/**").permitAll()
.anyRequest().authenticated() //3
;
return http.build();
}
}
1. csrf 보안 토큰 disable처리한다는 의미다.
2. jwt 토큰기반의 인증을 진행할 것이기때문에 세션사용은 하지않는다.
3. 위에 작성한 /index/** 와 h2-console/** 이외의 요청은 모두 인증을 받아야지만 접근이 가능하다.
+ 만약 모든요청에 대해 인증을 가능하도록 하고싶다면 anyRequest().permitAll() 을 하면된다.
IndexController.java는 다음과 같이 작성해준다.
@RestController
public class IndexController {
@GetMapping("/index")
public String hello() {
return "hello world";
}
}
이제 스프링을 실행하고 localhost:8080/index 에 접속해본다.
그런데 localhost:8080/h2-console 을 들어가 로그인을하면 오류가난다.
따라서 SecurityConfig를 다음과 같이 수정해준다.
@RequiredArgsConstructor
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf()
.ignoringAntMatchers("/h2-console/**")
.and()
.headers().frameOptions().sameOrigin()
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.formLogin().disable()
.httpBasic().disable()
.authorizeRequests()
.antMatchers("/login/**","/index/**","/h2-console/**").permitAll()
.anyRequest().authenticated()
;
return http.build();
}
이제 다시 localhost:8080/h2-console에 들어가면 잘 나올것이다.
다음시간에는 본격적으로 Member도메인을 만들고 JWT도 생성해보겠다.
출처