Compare commits

..

29 Commits

Author SHA1 Message Date
dongHyo
98f67f1bbc refactor: 규칙에 맞게 수정 2022-06-05 17:40:58 +09:00
dongHyo
ae136bea44 Merge branch 'feature/securitySetUp' of https://github.com/f-lab-edu/Ticketing into feature/securitySetUp 2022-06-05 17:34:07 +09:00
dongHyo
485894cdb1 refactor: 피드백 반영 2022-06-05 17:32:53 +09:00
Kim DongHyo
ef2c61d3f2 Merge branch 'develop' into feature/securitySetUp 2022-06-04 23:54:35 +09:00
dongHyo
a446c62643 refactor: 주석코드 제거 2022-06-01 02:06:36 +09:00
dongHyo
bda4384795 refactor: 하단 공백 추가 2022-06-01 02:06:14 +09:00
dongHyo
08522a2ff2 refactor: string 수기 작성한 json DTO로 테스트하도록 변경 2022-06-01 01:34:01 +09:00
dongHyo
a67e446f43 feat: UserController login 메서드 테스트 구현 2022-06-01 01:22:26 +09:00
dongHyo
435484cc13 feat: SecurityContextHolder Test 코드 작성 2022-06-01 00:26:27 +09:00
dongHyo
57c58ea5cc feat: @PreAuthorize("hasRole('GUEST')") 추가 2022-06-01 00:12:55 +09:00
dongHyo
477ff38a0a fix: health check permitAll 추가 2022-06-01 00:01:56 +09:00
dongHyo
0dd0c18c6e feat: UserController Login 메서드 구현 2022-05-31 20:06:23 +09:00
dongHyo
1866b88bc5 feat: Spring Security - Costom JWT 적용 2022-05-31 20:06:02 +09:00
dongHyo
09d2a5b68c feat: SecurityContextHolder 에서 email 리턴 메서드 구현 2022-05-31 20:05:09 +09:00
dongHyo
ed0f7b4b24 feat: Jwt Filter configure 등록 2022-05-31 20:04:00 +09:00
dongHyo
e608cc0a6b feat: JwtFilter 구현 2022-05-31 20:00:51 +09:00
dongHyo
1b43ebd628 feat: JwtProvider 구현 2022-05-31 20:00:22 +09:00
dongHyo
eed262f54a refactor: header -> accessHeader 네이밍 변경 2022-05-31 19:44:32 +09:00
dongHyo
9fea91e887 feat: Jwt 예외 핸들러 구현 2022-05-31 19:43:52 +09:00
dongHyo
c7bcca4836 feat: UserDetailsService CustomService 구현 2022-05-31 19:43:28 +09:00
dongHyo
eeaaafe991 refactor: UserSservice login 메소드 AuthenticationManagerBuilder 사용으로 변경 2022-05-31 19:42:48 +09:00
dongHyo
e3bd2f2671 refactor: @Getter 추가 2022-05-31 18:32:37 +09:00
dongHyo
d1d7f13c60 feat: jwt 설정파일 Loading 추가 2022-05-31 16:14:32 +09:00
dongHyo
b804c2bf25 feat: configuration-processor 추가 2022-05-31 16:11:02 +09:00
dongHyo
90b2abc988 refactor: checkPassword private -> public 범위변경 2022-05-27 18:30:14 +09:00
dongHyo
34bbe0ec7f refactor: findNotDeletedUserByEmail 메소드 추가 2022-05-27 18:26:49 +09:00
dongHyo
6259218422 feat: login 서비스 구현 2022-05-27 18:16:22 +09:00
dongHyo
07aa667326 fix: jjwt version 명시 2022-05-27 18:15:47 +09:00
dongHyo
3c9545fe82 feat: jwt 의존성 추가 2022-05-27 14:18:25 +09:00
7 changed files with 43 additions and 179 deletions

5
.idea/workspace.xml generated
View File

@@ -1,7 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="2a93e153-a90c-44db-b1da-6c4424693422" name="Changes" comment="" />
<list default="true" id="2a93e153-a90c-44db-b1da-6c4424693422" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/server/src/main/java/com/ticketing/server/global/config/SwaggerConfig.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/server/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/server/build.gradle.kts" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />

View File

@@ -1,7 +1,7 @@
plugins {
java
id("org.springframework.boot") version "2.6.7"
id("io.spring.dependency-management") version "1.0.11.RELEASE"
java
id("org.springframework.boot") version "2.6.7"
id("io.spring.dependency-management") version "1.0.11.RELEASE"
}
group = "com.ticketing"
@@ -9,59 +9,58 @@ version = "0.0.1-SNAPSHOT"
val javaVersion = JavaVersion.VERSION_11
java {
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
}
configurations {
compileOnly {
extendsFrom(configurations.annotationProcessor.get())
}
compileOnly {
extendsFrom(configurations.annotationProcessor.get())
}
}
repositories {
mavenCentral()
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("org.springframework.boot:spring-boot-starter-log4j2")
implementation("org.projectlombok:lombok:1.18.20")
implementation("io.springfox:springfox-swagger2:3.0.0")
implementation("io.springfox:springfox-swagger-ui:3.0.0")
implementation("com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4")
implementation("com.lmax:disruptor:3.4.2")
implementation("io.jsonwebtoken:jjwt-api:0.11.2")
implementation("com.googlecode.json-simple:json-simple:1.1.1")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("org.springframework.boot:spring-boot-starter-log4j2")
implementation("org.projectlombok:lombok:1.18.20")
implementation("io.springfox:springfox-swagger2:3.0.0")
implementation("io.springfox:springfox-swagger-ui:3.0.0")
implementation("com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4")
implementation("com.lmax:disruptor:3.4.2")
implementation("io.jsonwebtoken:jjwt-api:0.11.2")
modules {
module("org.springframework.boot:spring-boot-starter-logging") {
replacedBy("org.springframework.boot:spring-boot-starter-log4j2", "Use Log4j2 instead of Logback")
}
}
modules {
module("org.springframework.boot:spring-boot-starter-logging") {
replacedBy("org.springframework.boot:spring-boot-starter-log4j2", "Use Log4j2 instead of Logback")
}
}
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.springframework.security:spring-security-test")
testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.springframework.security:spring-security-test")
testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1")
compileOnly("org.projectlombok:lombok")
runtimeOnly("mysql:mysql-connector-java")
runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.2")
runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.2")
annotationProcessor("org.projectlombok:lombok")
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
compileOnly("org.projectlombok:lombok")
runtimeOnly("mysql:mysql-connector-java")
runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.2")
runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.2")
annotationProcessor("org.projectlombok:lombok")
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.springframework.security:spring-security-test")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.springframework.security:spring-security-test")
}
tasks.withType<Test> {
useJUnitPlatform()
useJUnitPlatform()
}

View File

@@ -1,25 +0,0 @@
package com.ticketing.server.global.config;
import java.nio.charset.Charset;
import java.time.Duration;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.BufferingClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder
.requestFactory(() -> new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()))
.setConnectTimeout(Duration.ofMillis(5000)) // connection-timeout
.setReadTimeout(Duration.ofMillis(5000)) // read-timeout
.additionalMessageConverters(new StringHttpMessageConverter(Charset.forName("UTF-8")))
.build();
}
}

View File

@@ -1,9 +0,0 @@
package com.ticketing.server.movie.service;
import com.ticketing.server.movie.service.interfaces.TMDBService;
import org.springframework.stereotype.Service;
@Service
public class TMBDServiceImpl implements TMDBService {
}

View File

@@ -1,5 +0,0 @@
package com.ticketing.server.movie.service.interfaces;
public interface TMDBService {
}

View File

@@ -1,94 +0,0 @@
package com.ticketing.server.movie.service;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
@SpringBootTest
public class TMDBServiceImplTest {
@Value("${tmdb.api-key}")
private String apiKey;
@Value("${tmdb.read-access-token}")
private String readAccessToken;
@Autowired
RestTemplate restTemplate;
@Test
@DisplayName("TMDB Service Test - Get [Now Playing] movies")
void shouldAbleToGetMovieList() throws Exception {
// given
assertNotNull(apiKey);
assertNotNull(readAccessToken);
ArrayList<Charset> acceptCharset = new ArrayList<>();
acceptCharset.add(StandardCharsets.UTF_8);
HttpHeaders headers = new HttpHeaders();
headers.setAcceptCharset(acceptCharset);
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth(readAccessToken);
Map<String, String> params = new HashMap<>();
params.put("api_key", apiKey);
params.put("language", "ko");
HttpEntity<?> request = new HttpEntity<>(headers);
// when
ResponseEntity<?> response = restTemplate.exchange(
"https://api.themoviedb.org/3/movie/now_playing?" + mapToUrlParam(params),
HttpMethod.GET,
request,
String.class
);
// JSONParser parser = new JSONParser();
// Object obj = parser.parse(String.valueOf(response));
// Object results = ((JSONObject) obj).get("results");
//
// ArrayList<String> movieList = new ArrayList<>();
//
// ArrayList<JSONObject> jsonMovieList = new ArrayList<>();
// then
assertTrue(response.getStatusCode().is2xxSuccessful());
}
private static String mapToUrlParam(Map<String, String> params) {
StringBuffer paramData = new StringBuffer();
for (Map.Entry<String, String> param : params.entrySet()) {
if (paramData.length() != 0) {
paramData.append('&');
}
paramData.append(param.getKey());
paramData.append('=');
paramData.append(param.getValue());
}
return paramData.toString();
}
}

View File

@@ -22,8 +22,3 @@ jwt:
prefix: Bearer
secret-key: Zi1sYWItdGlja2V0aW5nLXByb2plY3Qtc3ByaW5nLWJvb3Qtc2VjdXJpdHktand0LXNlY3JldC1rZXktZi1sYWItdGlja2V0aW5nLXByb2plY3Qtc3ByaW5nLWJvb3Qtc2VjdXJpdHktand0LXNlY3JldC1rZXkK
token-validity-in-seconds: 86400
tmdb:
api-key: 0d1503b6dcbfe1c514299b5564c649b8
read-access-token: eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIwZDE1MDNiNmRjYmZlMWM1MTQyOTliNTU2NGM2NDliOCIsInN1YiI6IjYyOWYwODRlNzI2ZmIxMTA2NDA4MjI2NCIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.rs8KZea8QLyashILiggWFx2s46lgUtzo-xSWoDgE58A