From ae745280a103318c7f98dac6b27a8cf99ac0da22 Mon Sep 17 00:00:00 2001 From: jsy3831 Date: Thu, 19 Aug 2021 16:53:32 +0900 Subject: [PATCH 1/5] branch test --- .../com/sns/untitled/user/controller/UserController.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/sns/untitled/user/controller/UserController.java b/src/main/java/com/sns/untitled/user/controller/UserController.java index 57cd84f..52ff737 100644 --- a/src/main/java/com/sns/untitled/user/controller/UserController.java +++ b/src/main/java/com/sns/untitled/user/controller/UserController.java @@ -2,6 +2,7 @@ import com.sns.untitled.user.service.UserService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; @@ -20,4 +21,9 @@ public UserController(UserService userService){ public String hello(@PathVariable String name){ return userService.hello(name); } + + @GetMapping("/login") + public String login(){ + return "test"; + } } From 84c9dded9eedd846e44f324ebce4a81adf2f0f55 Mon Sep 17 00:00:00 2001 From: jsy3831 Date: Mon, 23 Aug 2021 13:16:15 +0900 Subject: [PATCH 2/5] #2 0823 --- build.gradle | 3 ++ .../com/sns/untitled/UntitledApplication.java | 2 + .../user/controller/UserController.java | 31 ++++++------ .../{model/User.java => dto/UserDto.java} | 10 ++-- .../sns/untitled/user/mapper/UserMapper.java | 7 ++- .../untitled/user/service/UserService.java | 6 ++- .../user/service/impl/UserServiceImpl.java | 17 ++++--- src/main/resources/application.properties | 5 ++ src/main/resources/mapper/UserMapper.xml | 30 +++++++++-- .../user/controller/UserControllerTest.java | 33 ------------ .../service/impl/UserServiceImplTest.java | 50 +++++++++++++++++++ 11 files changed, 130 insertions(+), 64 deletions(-) rename src/main/java/com/sns/untitled/user/{model/User.java => dto/UserDto.java} (71%) delete mode 100644 src/test/java/com/sns/untitled/user/controller/UserControllerTest.java create mode 100644 src/test/java/com/sns/untitled/user/service/impl/UserServiceImplTest.java diff --git a/build.gradle b/build.gradle index a46dbe5..4c385a7 100644 --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,9 @@ dependencies { implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' implementation 'junit:junit:4.13.1' + implementation("org.springframework.boot:spring-boot-starter-redis") + implementation("org.springframework.session:spring-session-data-redis") + compileOnly 'org.projectlombok:lombok' runtimeOnly 'mysql:mysql-connector-java' annotationProcessor 'org.projectlombok:lombok' diff --git a/src/main/java/com/sns/untitled/UntitledApplication.java b/src/main/java/com/sns/untitled/UntitledApplication.java index 6e138d7..e53f93c 100644 --- a/src/main/java/com/sns/untitled/UntitledApplication.java +++ b/src/main/java/com/sns/untitled/UntitledApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; @SpringBootApplication +//@EnableRedisHttpSession public class UntitledApplication { public static void main(String[] args) { diff --git a/src/main/java/com/sns/untitled/user/controller/UserController.java b/src/main/java/com/sns/untitled/user/controller/UserController.java index 52ff737..f2a9eea 100644 --- a/src/main/java/com/sns/untitled/user/controller/UserController.java +++ b/src/main/java/com/sns/untitled/user/controller/UserController.java @@ -1,29 +1,32 @@ package com.sns.untitled.user.controller; +import com.sns.untitled.user.dto.UserDto; import com.sns.untitled.user.service.UserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RestController; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpSession; @RestController +@RequestMapping("/user") +@RequiredArgsConstructor public class UserController { private final UserService userService; - @Autowired - public UserController(UserService userService){ - this.userService = userService; + @PostMapping("/login") + public void login(@RequestParam String id, @RequestParam String password, HttpSession httpSession) { + UserDto user = userService.login(id, password); + httpSession.setAttribute("userInfo", user); } - @PostMapping("/hello/{name}") - public String hello(@PathVariable String name){ - return userService.hello(name); + @PostMapping("/logout") + public void logout() { } - @GetMapping("/login") - public String login(){ - return "test"; + @GetMapping("/{id}") + public UserDto getUserInfo(@PathVariable String id) { + UserDto user = userService.getUserInfo(id); + return user; } } diff --git a/src/main/java/com/sns/untitled/user/model/User.java b/src/main/java/com/sns/untitled/user/dto/UserDto.java similarity index 71% rename from src/main/java/com/sns/untitled/user/model/User.java rename to src/main/java/com/sns/untitled/user/dto/UserDto.java index 94e978f..74bba37 100644 --- a/src/main/java/com/sns/untitled/user/model/User.java +++ b/src/main/java/com/sns/untitled/user/dto/UserDto.java @@ -1,13 +1,13 @@ -package com.sns.untitled.user.model; +package com.sns.untitled.user.dto; import lombok.Getter; import lombok.Setter; -import java.util.Date; +import java.time.LocalDateTime; @Getter @Setter -public class User { +public class UserDto { private int userId; @@ -19,10 +19,12 @@ public class User { private String email; - private Date birth; + private LocalDateTime birth; private String profileImageName; + private String profileImagePath; + private String profileMessage; } diff --git a/src/main/java/com/sns/untitled/user/mapper/UserMapper.java b/src/main/java/com/sns/untitled/user/mapper/UserMapper.java index 4fa2c87..e17f63a 100644 --- a/src/main/java/com/sns/untitled/user/mapper/UserMapper.java +++ b/src/main/java/com/sns/untitled/user/mapper/UserMapper.java @@ -1,9 +1,14 @@ package com.sns.untitled.user.mapper; +import com.sns.untitled.user.dto.UserDto; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; @Mapper public interface UserMapper { -// void insertName(String name); + UserDto findUserByIdAndPassword(@Param("id") String id, @Param("password") String password); + + UserDto findUserById(@Param("id") String id); + } diff --git a/src/main/java/com/sns/untitled/user/service/UserService.java b/src/main/java/com/sns/untitled/user/service/UserService.java index 9e5fee7..0d6f8e5 100644 --- a/src/main/java/com/sns/untitled/user/service/UserService.java +++ b/src/main/java/com/sns/untitled/user/service/UserService.java @@ -1,7 +1,11 @@ package com.sns.untitled.user.service; +import com.sns.untitled.user.dto.UserDto; + public interface UserService { - public String hello(String name); + UserDto login(String id, String password); + + UserDto getUserInfo(String id); } diff --git a/src/main/java/com/sns/untitled/user/service/impl/UserServiceImpl.java b/src/main/java/com/sns/untitled/user/service/impl/UserServiceImpl.java index 0fd4e3c..6b0cbe6 100644 --- a/src/main/java/com/sns/untitled/user/service/impl/UserServiceImpl.java +++ b/src/main/java/com/sns/untitled/user/service/impl/UserServiceImpl.java @@ -1,23 +1,26 @@ package com.sns.untitled.user.service.impl; import com.sns.untitled.user.mapper.UserMapper; +import com.sns.untitled.user.dto.UserDto; import com.sns.untitled.user.service.UserService; -import org.springframework.beans.factory.annotation.Autowired; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @Service +@RequiredArgsConstructor public class UserServiceImpl implements UserService { private final UserMapper userMapper; - @Autowired - public UserServiceImpl(UserMapper userMapper){ - this.userMapper = userMapper; + @Override + public UserDto login(String id, String password) { + UserDto userInfo = userMapper.findUserByIdAndPassword(id, password); + return userInfo; } @Override - public String hello(String name) { -// userMapper.insertName(name); - return "Hello " + name + " Success Insert"; + public UserDto getUserInfo(String id) { + UserDto userInfo = userMapper.findUserById(id); + return userInfo; } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ea8c1ef..3ffdda7 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -3,3 +3,8 @@ spring.datasource.username=root spring.datasource.password=nzpen030# spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy +#spring.session.store-type=redis +#spring.redis.host=localhost +#spring.redis.password= +#spring.redis.port=6379 + diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index 0676fd4..92db849 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -2,8 +2,30 @@ - - - - + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/com/sns/untitled/user/controller/UserControllerTest.java b/src/test/java/com/sns/untitled/user/controller/UserControllerTest.java deleted file mode 100644 index 507240e..0000000 --- a/src/test/java/com/sns/untitled/user/controller/UserControllerTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.sns.untitled.user.controller; - -import com.sns.untitled.user.service.UserService; -import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; - -import static org.junit.jupiter.api.Assertions.*; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; - -@RunWith(SpringRunner.class) -@WebMvcTest -class UserControllerTest { - - @Autowired - MockMvc mockMvc; - - @MockBean - UserService userService; - - @Test - public void hello() throws Exception { - mockMvc.perform(get("/hello/test")) - .andDo(print()) - .andExpect(status().isOk()); - } -} \ No newline at end of file diff --git a/src/test/java/com/sns/untitled/user/service/impl/UserServiceImplTest.java b/src/test/java/com/sns/untitled/user/service/impl/UserServiceImplTest.java new file mode 100644 index 0000000..a37e3e9 --- /dev/null +++ b/src/test/java/com/sns/untitled/user/service/impl/UserServiceImplTest.java @@ -0,0 +1,50 @@ +package com.sns.untitled.user.service.impl; + +import com.sns.untitled.user.mapper.UserMapper; +import com.sns.untitled.user.dto.UserDto; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class UserServiceImplTest { + + @InjectMocks + UserServiceImpl userServiceImpl; + + @Mock + UserMapper userMapper; + + public UserDto userDto() { + UserDto user = new UserDto(); + user.setUserId(1); + user.setId("admin"); + user.setPassword("1234"); + user.setName("관리자"); + user.setEmail("admin@gmail.com"); + user.setProfileImageName("프로필사진1"); + user.setProfileImagePath("이미지경로"); + user.setProfileMessage("상태메세지"); + return user; + } + + @Test + @DisplayName("로그인 성공") + public void successLogin() throws Exception { + //given + UserDto userDto = userDto(); + when(userMapper.findUserByIdAndPassword("admin", "1234")).thenReturn(userDto); + + //when + UserDto result = userServiceImpl.login("admin", "1234"); + + //then + assertEquals(result, userDto); + } +} \ No newline at end of file From aae32d484370225199c37f072a5f2d5122563a4e Mon Sep 17 00:00:00 2001 From: jsy3831 Date: Mon, 23 Aug 2021 19:09:02 +0900 Subject: [PATCH 3/5] =?UTF-8?q?#2=20redis=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 +- .../com/sns/untitled/UntitledApplication.java | 2 - .../com/sns/untitled/config/RedisConfig.java | 38 +++++++++++++++++++ .../user/controller/UserController.java | 22 +++++++---- src/main/resources/application.properties | 7 ++-- 5 files changed, 58 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/sns/untitled/config/RedisConfig.java diff --git a/build.gradle b/build.gradle index 4c385a7..ccb22b5 100644 --- a/build.gradle +++ b/build.gradle @@ -25,8 +25,8 @@ dependencies { implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' implementation 'junit:junit:4.13.1' - implementation("org.springframework.boot:spring-boot-starter-redis") - implementation("org.springframework.session:spring-session-data-redis") + implementation 'org.springframework.boot:spring-boot-starter-data-redis' + implementation 'org.springframework.session:spring-session-data-redis' compileOnly 'org.projectlombok:lombok' runtimeOnly 'mysql:mysql-connector-java' diff --git a/src/main/java/com/sns/untitled/UntitledApplication.java b/src/main/java/com/sns/untitled/UntitledApplication.java index e53f93c..6e138d7 100644 --- a/src/main/java/com/sns/untitled/UntitledApplication.java +++ b/src/main/java/com/sns/untitled/UntitledApplication.java @@ -2,10 +2,8 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; @SpringBootApplication -//@EnableRedisHttpSession public class UntitledApplication { public static void main(String[] args) { diff --git a/src/main/java/com/sns/untitled/config/RedisConfig.java b/src/main/java/com/sns/untitled/config/RedisConfig.java new file mode 100644 index 0000000..c88bef1 --- /dev/null +++ b/src/main/java/com/sns/untitled/config/RedisConfig.java @@ -0,0 +1,38 @@ +package com.sns.untitled.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; +import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer; + +//@Configuration +//@EnableRedisHttpSession +//public class RedisConfig extends AbstractHttpSessionApplicationInitializer { +// +// @Bean +// public RedisConnectionFactory redisConnectionFactory() { +// LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(); +// return lettuceConnectionFactory; +// } +// +// @Bean +// public RedisTemplate redisTemplate() { +// RedisTemplate redisTemplate = new RedisTemplate<>(); +// redisTemplate.setConnectionFactory(redisConnectionFactory()); +// redisTemplate.setKeySerializer(new StringRedisSerializer()); +// redisTemplate.setValueSerializer(new StringRedisSerializer()); +// return redisTemplate; +// } +// +// @Bean +// public StringRedisTemplate stringRedisTemplate() { +// StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(); +// stringRedisTemplate.setKeySerializer(new StringRedisSerializer()); +// stringRedisTemplate.setValueSerializer(new StringRedisSerializer()); +// stringRedisTemplate.setConnectionFactory(redisConnectionFactory()); +// return stringRedisTemplate; +// } +// +//} diff --git a/src/main/java/com/sns/untitled/user/controller/UserController.java b/src/main/java/com/sns/untitled/user/controller/UserController.java index f2a9eea..c84627d 100644 --- a/src/main/java/com/sns/untitled/user/controller/UserController.java +++ b/src/main/java/com/sns/untitled/user/controller/UserController.java @@ -15,18 +15,26 @@ public class UserController { private final UserService userService; @PostMapping("/login") - public void login(@RequestParam String id, @RequestParam String password, HttpSession httpSession) { - UserDto user = userService.login(id, password); - httpSession.setAttribute("userInfo", user); + public String login(@RequestParam String id, @RequestParam String password, HttpSession httpSession) { + UserDto userInfo = userService.login(id, password); + + if(userInfo != null) { +// httpSession.setAttribute("userInfo", userInfo); + httpSession.setAttribute("name", "seyoung"); + } else { + + } + return httpSession.getId(); } @PostMapping("/logout") - public void logout() { + public void logout(HttpSession httpSession) { + httpSession.invalidate(); } @GetMapping("/{id}") public UserDto getUserInfo(@PathVariable String id) { - UserDto user = userService.getUserInfo(id); - return user; + UserDto userInfo = userService.getUserInfo(id); + return userInfo; } -} +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3ffdda7..68e79c4 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -3,8 +3,7 @@ spring.datasource.username=root spring.datasource.password=nzpen030# spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy -#spring.session.store-type=redis -#spring.redis.host=localhost -#spring.redis.password= -#spring.redis.port=6379 +spring.session.store-type=redis +spring.redis.host=localhost +spring.redis.port=6379 From 3ff18e937e47ba904b8863da1bf74dffcec85d30 Mon Sep 17 00:00:00 2001 From: jsy3831 Date: Sun, 29 Aug 2021 01:21:29 +0900 Subject: [PATCH 4/5] =?UTF-8?q?#2=20=EC=BD=94=EB=93=9C=EB=A6=AC=EB=B7=B0?= =?UTF-8?q?=EB=B0=98=EC=98=81=20/=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=EC=B2=B4?= =?UTF-8?q?=ED=81=AC=20aspect=20=EC=B6=94=EA=B0=80=20/=20controllerAdvice?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 12 ++-- settings.gradle | 2 +- .../PhotobookApplication.java} | 6 +- .../com/photobook/annotation/LoginCheck.java | 9 +++ .../com/photobook/aop/AuthCheckAspect.java | 37 ++++++++++ .../config/MyBatisConfig.java | 4 +- .../config/RedisConfig.java | 20 +++--- .../photobook/exception/ExceptionAdvice.java | 31 ++++++++ .../exception/UnauthorizedException.java | 8 +++ .../user/controller/UserController.java | 46 ++++++++++++ .../user/dto/UserDto.java | 6 +- .../com/photobook/user/mapper/UserMapper.java | 14 ++++ .../photobook/user/service/LoginService.java | 15 ++++ .../photobook/user/service/UserService.java | 11 +++ .../user/service/impl/LoginServiceImpl.java | 28 ++++++++ .../user/service/impl/UserServiceImpl.java | 34 +++++++++ .../user/controller/UserController.java | 40 ----------- .../sns/untitled/user/mapper/UserMapper.java | 14 ---- .../untitled/user/service/UserService.java | 11 --- .../user/service/impl/UserServiceImpl.java | 26 ------- src/main/resources/application.properties | 6 +- src/main/resources/mapper/UserMapper.xml | 12 ++-- .../PhotobookApplicationTests.java} | 4 +- .../service/impl/UserServiceImplTest.java | 72 +++++++++++++++++++ .../service/impl/UserServiceImplTest.java | 50 ------------- 25 files changed, 342 insertions(+), 176 deletions(-) rename src/main/java/com/{sns/untitled/UntitledApplication.java => photobook/PhotobookApplication.java} (61%) create mode 100644 src/main/java/com/photobook/annotation/LoginCheck.java create mode 100644 src/main/java/com/photobook/aop/AuthCheckAspect.java rename src/main/java/com/{sns/untitled => photobook}/config/MyBatisConfig.java (92%) rename src/main/java/com/{sns/untitled => photobook}/config/RedisConfig.java (70%) create mode 100644 src/main/java/com/photobook/exception/ExceptionAdvice.java create mode 100644 src/main/java/com/photobook/exception/UnauthorizedException.java create mode 100644 src/main/java/com/photobook/user/controller/UserController.java rename src/main/java/com/{sns/untitled => photobook}/user/dto/UserDto.java (76%) create mode 100644 src/main/java/com/photobook/user/mapper/UserMapper.java create mode 100644 src/main/java/com/photobook/user/service/LoginService.java create mode 100644 src/main/java/com/photobook/user/service/UserService.java create mode 100644 src/main/java/com/photobook/user/service/impl/LoginServiceImpl.java create mode 100644 src/main/java/com/photobook/user/service/impl/UserServiceImpl.java delete mode 100644 src/main/java/com/sns/untitled/user/controller/UserController.java delete mode 100644 src/main/java/com/sns/untitled/user/mapper/UserMapper.java delete mode 100644 src/main/java/com/sns/untitled/user/service/UserService.java delete mode 100644 src/main/java/com/sns/untitled/user/service/impl/UserServiceImpl.java rename src/test/java/com/{sns/untitled/UntitledApplicationTests.java => photobook/PhotobookApplicationTests.java} (73%) create mode 100644 src/test/java/com/photobook/user/service/impl/UserServiceImplTest.java delete mode 100644 src/test/java/com/sns/untitled/user/service/impl/UserServiceImplTest.java diff --git a/build.gradle b/build.gradle index ccb22b5..ef5258b 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id 'java' } -group = 'com.sns' +group = 'com' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' @@ -20,13 +20,15 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' - implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' - implementation 'junit:junit:4.13.1' - implementation 'org.springframework.boot:spring-boot-starter-data-redis' - implementation 'org.springframework.session:spring-session-data-redis' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.springframework.boot:spring-boot-starter-aop' +// implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' +// implementation 'junit:junit:4.13.1' +// implementation 'org.springframework.boot:spring-boot-starter-data-redis' +// implementation 'org.springframework.session:spring-session-data-redis' compileOnly 'org.projectlombok:lombok' runtimeOnly 'mysql:mysql-connector-java' diff --git a/settings.gradle b/settings.gradle index 2572cb1..9533abb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -rootProject.name = 'untitled' +rootProject.name = 'photobook' diff --git a/src/main/java/com/sns/untitled/UntitledApplication.java b/src/main/java/com/photobook/PhotobookApplication.java similarity index 61% rename from src/main/java/com/sns/untitled/UntitledApplication.java rename to src/main/java/com/photobook/PhotobookApplication.java index 6e138d7..012ee43 100644 --- a/src/main/java/com/sns/untitled/UntitledApplication.java +++ b/src/main/java/com/photobook/PhotobookApplication.java @@ -1,13 +1,13 @@ -package com.sns.untitled; +package com.photobook; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class UntitledApplication { +public class PhotobookApplication { public static void main(String[] args) { - SpringApplication.run(UntitledApplication.class, args); + SpringApplication.run(PhotobookApplication.class, args); } } diff --git a/src/main/java/com/photobook/annotation/LoginCheck.java b/src/main/java/com/photobook/annotation/LoginCheck.java new file mode 100644 index 0000000..f82e296 --- /dev/null +++ b/src/main/java/com/photobook/annotation/LoginCheck.java @@ -0,0 +1,9 @@ +package com.photobook.annotation; + +import java.lang.annotation.*; + +@Documented +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.CLASS) +public @interface LoginCheck { +} diff --git a/src/main/java/com/photobook/aop/AuthCheckAspect.java b/src/main/java/com/photobook/aop/AuthCheckAspect.java new file mode 100644 index 0000000..48b44f8 --- /dev/null +++ b/src/main/java/com/photobook/aop/AuthCheckAspect.java @@ -0,0 +1,37 @@ +package com.photobook.aop; + +import com.photobook.user.service.LoginService; +import com.photobook.exception.UnauthorizedException; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpSession; + +@Component +@Aspect +public class AuthCheckAspect { + + LoginService loginService; + + public AuthCheckAspect(LoginService loginService) { + this.loginService = loginService; + } + + @Before("@annotation(com.photobook.annotation.LoginCheck)") + public void loginCheck() { + + HttpSession httpSession = ((ServletRequestAttributes) RequestContextHolder + .currentRequestAttributes()) // RequestAttributes가 없으면 예외 발생 + .getRequest() + .getSession(); + + if (loginService.getLoginUserInfo(httpSession) == null) { + throw new UnauthorizedException("로그인된 사용자 정보가 존재하지 않습니다."); + } + + } + +} diff --git a/src/main/java/com/sns/untitled/config/MyBatisConfig.java b/src/main/java/com/photobook/config/MyBatisConfig.java similarity index 92% rename from src/main/java/com/sns/untitled/config/MyBatisConfig.java rename to src/main/java/com/photobook/config/MyBatisConfig.java index c816147..b08ddc9 100644 --- a/src/main/java/com/sns/untitled/config/MyBatisConfig.java +++ b/src/main/java/com/photobook/config/MyBatisConfig.java @@ -1,4 +1,4 @@ -package com.sns.untitled.config; +package com.photobook.config; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; @@ -11,7 +11,7 @@ import javax.sql.DataSource; @Configuration -@MapperScan(basePackages = "com.sns.untitled.*.mapper") +@MapperScan(basePackages = "com.photobook.*.mapper") public class MyBatisConfig { @Bean diff --git a/src/main/java/com/sns/untitled/config/RedisConfig.java b/src/main/java/com/photobook/config/RedisConfig.java similarity index 70% rename from src/main/java/com/sns/untitled/config/RedisConfig.java rename to src/main/java/com/photobook/config/RedisConfig.java index c88bef1..8915ee2 100644 --- a/src/main/java/com/sns/untitled/config/RedisConfig.java +++ b/src/main/java/com/photobook/config/RedisConfig.java @@ -1,12 +1,12 @@ -package com.sns.untitled.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; -import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; -import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer; - +//package com.photobook.config; +// +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.data.redis.connection.RedisConnectionFactory; +//import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +//import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; +//import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer; +// //@Configuration //@EnableRedisHttpSession //public class RedisConfig extends AbstractHttpSessionApplicationInitializer { @@ -35,4 +35,4 @@ // return stringRedisTemplate; // } // -//} +//} \ No newline at end of file diff --git a/src/main/java/com/photobook/exception/ExceptionAdvice.java b/src/main/java/com/photobook/exception/ExceptionAdvice.java new file mode 100644 index 0000000..1262f54 --- /dev/null +++ b/src/main/java/com/photobook/exception/ExceptionAdvice.java @@ -0,0 +1,31 @@ +package com.photobook.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.validation.ConstraintViolationException; + +@RestControllerAdvice +public class ExceptionAdvice { + + @ExceptionHandler(IllegalArgumentException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public String illegalArgumentException(IllegalArgumentException e) { + return e.getMessage(); + } + + @ExceptionHandler(ConstraintViolationException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public String constraintViolationException(ConstraintViolationException e) { + return e.getMessage(); + } + + @ExceptionHandler(UnauthorizedException.class) + @ResponseStatus(HttpStatus.UNAUTHORIZED) + public String unauthorizedException(UnauthorizedException e) { + return e.getMessage(); + } + +} diff --git a/src/main/java/com/photobook/exception/UnauthorizedException.java b/src/main/java/com/photobook/exception/UnauthorizedException.java new file mode 100644 index 0000000..5ffc24a --- /dev/null +++ b/src/main/java/com/photobook/exception/UnauthorizedException.java @@ -0,0 +1,8 @@ +package com.photobook.exception; + +public class UnauthorizedException extends RuntimeException { + + public UnauthorizedException(String message) { + super(message); + } +} diff --git a/src/main/java/com/photobook/user/controller/UserController.java b/src/main/java/com/photobook/user/controller/UserController.java new file mode 100644 index 0000000..61d569e --- /dev/null +++ b/src/main/java/com/photobook/user/controller/UserController.java @@ -0,0 +1,46 @@ +package com.photobook.user.controller; + +import com.photobook.annotation.LoginCheck; +import com.photobook.user.dto.UserDto; +import com.photobook.user.service.LoginService; +import com.photobook.user.service.UserService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpSession; +import javax.validation.constraints.NotBlank; + +@RestController +@RequestMapping("/users") +@Validated +public class UserController { + + private final UserService userService; + + private final LoginService loginService; + + public UserController(UserService userService, LoginService loginService) { + this.userService = userService; + this.loginService = loginService; + } + + @PostMapping("/login") + public void login(@RequestParam @NotBlank String id, @RequestParam @NotBlank String password, HttpSession httpSession) { + UserDto userInfo = userService.getUserInfoByIdAndPassword(id, password); + + loginService.setLoginUserInfo(httpSession, userInfo); + } + + @PostMapping("/logout") + @LoginCheck + public void logout(HttpSession httpSession) { + loginService.removeLoginUserInfo(httpSession); + } + + @GetMapping("/{id}") + @LoginCheck + public UserDto getUserInfoById(@PathVariable @NotBlank String id) { + UserDto userInfo = userService.getUserInfoById(id); + return userInfo; + } +} \ No newline at end of file diff --git a/src/main/java/com/sns/untitled/user/dto/UserDto.java b/src/main/java/com/photobook/user/dto/UserDto.java similarity index 76% rename from src/main/java/com/sns/untitled/user/dto/UserDto.java rename to src/main/java/com/photobook/user/dto/UserDto.java index 74bba37..80b99df 100644 --- a/src/main/java/com/sns/untitled/user/dto/UserDto.java +++ b/src/main/java/com/photobook/user/dto/UserDto.java @@ -1,9 +1,9 @@ -package com.sns.untitled.user.dto; +package com.photobook.user.dto; import lombok.Getter; import lombok.Setter; -import java.time.LocalDateTime; +import java.time.LocalDate; @Getter @Setter @@ -19,7 +19,7 @@ public class UserDto { private String email; - private LocalDateTime birth; + private LocalDate birth; private String profileImageName; diff --git a/src/main/java/com/photobook/user/mapper/UserMapper.java b/src/main/java/com/photobook/user/mapper/UserMapper.java new file mode 100644 index 0000000..4007e8c --- /dev/null +++ b/src/main/java/com/photobook/user/mapper/UserMapper.java @@ -0,0 +1,14 @@ +package com.photobook.user.mapper; + +import com.photobook.user.dto.UserDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface UserMapper { + + UserDto getUserInfoByIdAndPassword(@Param("id") String id, @Param("password") String password); + + UserDto getUserInfoById(@Param("id") String id); + +} diff --git a/src/main/java/com/photobook/user/service/LoginService.java b/src/main/java/com/photobook/user/service/LoginService.java new file mode 100644 index 0000000..d91e788 --- /dev/null +++ b/src/main/java/com/photobook/user/service/LoginService.java @@ -0,0 +1,15 @@ +package com.photobook.user.service; + +import com.photobook.user.dto.UserDto; + +import javax.servlet.http.HttpSession; + +public interface LoginService { + + void setLoginUserInfo(HttpSession httpSession, UserDto userDto); + + void removeLoginUserInfo(HttpSession httpSession); + + Object getLoginUserInfo(HttpSession httpSession); + +} diff --git a/src/main/java/com/photobook/user/service/UserService.java b/src/main/java/com/photobook/user/service/UserService.java new file mode 100644 index 0000000..d25c111 --- /dev/null +++ b/src/main/java/com/photobook/user/service/UserService.java @@ -0,0 +1,11 @@ +package com.photobook.user.service; + +import com.photobook.user.dto.UserDto; + +public interface UserService { + + UserDto getUserInfoByIdAndPassword(String id, String password); + + UserDto getUserInfoById(String id); + +} diff --git a/src/main/java/com/photobook/user/service/impl/LoginServiceImpl.java b/src/main/java/com/photobook/user/service/impl/LoginServiceImpl.java new file mode 100644 index 0000000..0b008e3 --- /dev/null +++ b/src/main/java/com/photobook/user/service/impl/LoginServiceImpl.java @@ -0,0 +1,28 @@ +package com.photobook.user.service.impl; + +import com.photobook.user.dto.UserDto; +import com.photobook.user.service.LoginService; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; + +@Service +public class LoginServiceImpl implements LoginService { + + private static final String LOGIN_USER_INFO = "LOGIN_USER_INFO"; + + @Override + public void setLoginUserInfo(HttpSession httpSession, UserDto userDto) { + httpSession.setAttribute(LOGIN_USER_INFO, userDto); + } + + @Override + public void removeLoginUserInfo(HttpSession httpSession) { + httpSession.invalidate(); + } + + @Override + public Object getLoginUserInfo(HttpSession httpSession) { + return httpSession.getAttribute(LOGIN_USER_INFO); + } +} diff --git a/src/main/java/com/photobook/user/service/impl/UserServiceImpl.java b/src/main/java/com/photobook/user/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..8d19b1f --- /dev/null +++ b/src/main/java/com/photobook/user/service/impl/UserServiceImpl.java @@ -0,0 +1,34 @@ +package com.photobook.user.service.impl; + +import com.photobook.user.mapper.UserMapper; +import com.photobook.user.dto.UserDto; +import com.photobook.user.service.UserService; +import org.springframework.stereotype.Service; + +@Service +public class UserServiceImpl implements UserService { + + private final UserMapper userMapper; + + public UserServiceImpl(UserMapper userMapper) { + this.userMapper = userMapper; + } + + @Override + public UserDto getUserInfoByIdAndPassword(String id, String password) { + + UserDto userInfo = userMapper.getUserInfoByIdAndPassword(id, password); + + if(userInfo == null) { + throw new IllegalArgumentException("아이디 또는 비밀번호가 잘못 입력 되었습니다."); + } + + return userInfo; + } + + @Override + public UserDto getUserInfoById(String id) { + UserDto userInfo = userMapper.getUserInfoById(id); + return userInfo; + } +} diff --git a/src/main/java/com/sns/untitled/user/controller/UserController.java b/src/main/java/com/sns/untitled/user/controller/UserController.java deleted file mode 100644 index c84627d..0000000 --- a/src/main/java/com/sns/untitled/user/controller/UserController.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.sns.untitled.user.controller; - -import com.sns.untitled.user.dto.UserDto; -import com.sns.untitled.user.service.UserService; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpSession; - -@RestController -@RequestMapping("/user") -@RequiredArgsConstructor -public class UserController { - - private final UserService userService; - - @PostMapping("/login") - public String login(@RequestParam String id, @RequestParam String password, HttpSession httpSession) { - UserDto userInfo = userService.login(id, password); - - if(userInfo != null) { -// httpSession.setAttribute("userInfo", userInfo); - httpSession.setAttribute("name", "seyoung"); - } else { - - } - return httpSession.getId(); - } - - @PostMapping("/logout") - public void logout(HttpSession httpSession) { - httpSession.invalidate(); - } - - @GetMapping("/{id}") - public UserDto getUserInfo(@PathVariable String id) { - UserDto userInfo = userService.getUserInfo(id); - return userInfo; - } -} \ No newline at end of file diff --git a/src/main/java/com/sns/untitled/user/mapper/UserMapper.java b/src/main/java/com/sns/untitled/user/mapper/UserMapper.java deleted file mode 100644 index e17f63a..0000000 --- a/src/main/java/com/sns/untitled/user/mapper/UserMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.sns.untitled.user.mapper; - -import com.sns.untitled.user.dto.UserDto; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; - -@Mapper -public interface UserMapper { - - UserDto findUserByIdAndPassword(@Param("id") String id, @Param("password") String password); - - UserDto findUserById(@Param("id") String id); - -} diff --git a/src/main/java/com/sns/untitled/user/service/UserService.java b/src/main/java/com/sns/untitled/user/service/UserService.java deleted file mode 100644 index 0d6f8e5..0000000 --- a/src/main/java/com/sns/untitled/user/service/UserService.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.sns.untitled.user.service; - -import com.sns.untitled.user.dto.UserDto; - -public interface UserService { - - UserDto login(String id, String password); - - UserDto getUserInfo(String id); - -} diff --git a/src/main/java/com/sns/untitled/user/service/impl/UserServiceImpl.java b/src/main/java/com/sns/untitled/user/service/impl/UserServiceImpl.java deleted file mode 100644 index 6b0cbe6..0000000 --- a/src/main/java/com/sns/untitled/user/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.sns.untitled.user.service.impl; - -import com.sns.untitled.user.mapper.UserMapper; -import com.sns.untitled.user.dto.UserDto; -import com.sns.untitled.user.service.UserService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class UserServiceImpl implements UserService { - - private final UserMapper userMapper; - - @Override - public UserDto login(String id, String password) { - UserDto userInfo = userMapper.findUserByIdAndPassword(id, password); - return userInfo; - } - - @Override - public UserDto getUserInfo(String id) { - UserDto userInfo = userMapper.findUserById(id); - return userInfo; - } -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 68e79c4..ed3e529 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -3,7 +3,7 @@ spring.datasource.username=root spring.datasource.password=nzpen030# spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy -spring.session.store-type=redis -spring.redis.host=localhost -spring.redis.port=6379 +#spring.session.store-type=redis +#spring.redis.host=localhost +#spring.redis.port=6379 diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index 92db849..7fe874b 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -1,9 +1,9 @@ - + - + @@ -15,15 +15,15 @@ - + SELECT user_id, id, password, name, email, birth, profile_image_name, profile_image_path, profile_message FROM user WHERE id = #{id} AND password = #{password} - + SELECT user_id, id, password, name, email, birth, profile_image_name, profile_image_path, profile_message FROM user WHERE id = #{id} diff --git a/src/test/java/com/sns/untitled/UntitledApplicationTests.java b/src/test/java/com/photobook/PhotobookApplicationTests.java similarity index 73% rename from src/test/java/com/sns/untitled/UntitledApplicationTests.java rename to src/test/java/com/photobook/PhotobookApplicationTests.java index ec039a5..710a826 100644 --- a/src/test/java/com/sns/untitled/UntitledApplicationTests.java +++ b/src/test/java/com/photobook/PhotobookApplicationTests.java @@ -1,10 +1,10 @@ -package com.sns.untitled; +package com.photobook; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest -class UntitledApplicationTests { +class PhotobookApplicationTests { @Test void contextLoads() { diff --git a/src/test/java/com/photobook/user/service/impl/UserServiceImplTest.java b/src/test/java/com/photobook/user/service/impl/UserServiceImplTest.java new file mode 100644 index 0000000..3a16538 --- /dev/null +++ b/src/test/java/com/photobook/user/service/impl/UserServiceImplTest.java @@ -0,0 +1,72 @@ +package com.photobook.user.service.impl; + +import com.photobook.user.mapper.UserMapper; +import com.photobook.user.dto.UserDto; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.time.LocalDate; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class UserServiceImplTest { + + @InjectMocks + UserServiceImpl userServiceImpl; + + @Mock + UserMapper userMapper; + + public UserDto userInfo() { + UserDto userInfo = new UserDto(); + userInfo.setUserId(1); + userInfo.setId("admin"); + userInfo.setPassword("1234"); + userInfo.setName("관리자"); + userInfo.setEmail("admin@gmail.com"); + userInfo.setBirth(LocalDate.of(1993, 10, 28)); + userInfo.setProfileImageName("프로필사진1"); + userInfo.setProfileImagePath("이미지경로"); + userInfo.setProfileMessage("상태메세지"); + + return userInfo; + } + + @Test + @DisplayName("사용자 정보가 존재하면 성공") + public void successGetUserInfoByIdAndPassword() { + //given + UserDto userInfo = userInfo(); + when(userMapper.getUserInfoByIdAndPassword("admin", "1234")).thenReturn(userInfo); + + //when + UserDto result = userServiceImpl.getUserInfoByIdAndPassword("admin", "1234"); + + //then + assertEquals(result, userInfo); + } + + @Test + @DisplayName("사용자 정보가 존재하지 않으면 성공") + public void failureGetUserInfoByIdAndPassword() { + //given + when(userMapper.getUserInfoByIdAndPassword("notExistId", "notExistPassword")).thenReturn(null); + + //when + IllegalArgumentException exception = + assertThrows(IllegalArgumentException.class, () -> { + userServiceImpl.getUserInfoByIdAndPassword("notExistId", "notExistPassword"); + }); + + //then + assertEquals("아이디 또는 비밀번호가 잘못 입력 되었습니다.", exception.getMessage()); + + } +} \ No newline at end of file diff --git a/src/test/java/com/sns/untitled/user/service/impl/UserServiceImplTest.java b/src/test/java/com/sns/untitled/user/service/impl/UserServiceImplTest.java deleted file mode 100644 index a37e3e9..0000000 --- a/src/test/java/com/sns/untitled/user/service/impl/UserServiceImplTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.sns.untitled.user.service.impl; - -import com.sns.untitled.user.mapper.UserMapper; -import com.sns.untitled.user.dto.UserDto; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.*; - -@ExtendWith(MockitoExtension.class) -class UserServiceImplTest { - - @InjectMocks - UserServiceImpl userServiceImpl; - - @Mock - UserMapper userMapper; - - public UserDto userDto() { - UserDto user = new UserDto(); - user.setUserId(1); - user.setId("admin"); - user.setPassword("1234"); - user.setName("관리자"); - user.setEmail("admin@gmail.com"); - user.setProfileImageName("프로필사진1"); - user.setProfileImagePath("이미지경로"); - user.setProfileMessage("상태메세지"); - return user; - } - - @Test - @DisplayName("로그인 성공") - public void successLogin() throws Exception { - //given - UserDto userDto = userDto(); - when(userMapper.findUserByIdAndPassword("admin", "1234")).thenReturn(userDto); - - //when - UserDto result = userServiceImpl.login("admin", "1234"); - - //then - assertEquals(result, userDto); - } -} \ No newline at end of file From 03ba493db21e54c88032df2a5d748f30c43dcd4a Mon Sep 17 00:00:00 2001 From: jsy3831 Date: Thu, 9 Sep 2021 11:36:15 +0900 Subject: [PATCH 5/5] =?UTF-8?q?#2=20=ED=8C=A8=ED=82=A4=EC=A7=80=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=EB=B3=80=EA=B2=BD=20/=20session=20=EC=9D=98=EC=A1=B4?= =?UTF-8?q?=EC=84=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 -- .../com/photobook/aop/AuthCheckAspect.java | 17 +++------ .../com/photobook/config/MyBatisConfig.java | 2 +- .../{user => }/controller/UserController.java | 17 +++++---- .../com/photobook/{user => }/dto/UserDto.java | 2 +- .../photobook/exception/ExceptionAdvice.java | 5 +++ .../{user => }/mapper/UserMapper.java | 4 +-- .../com/photobook/service/LoginService.java | 15 ++++++++ .../{user => }/service/UserService.java | 4 +-- .../service/impl/LoginServiceImpl.java | 35 +++++++++++++++++++ .../service/impl/UserServiceImpl.java | 13 ++++--- .../photobook/user/service/LoginService.java | 15 -------- .../user/service/impl/LoginServiceImpl.java | 28 --------------- src/main/resources/mapper/UserMapper.xml | 4 +-- .../service/impl/UserServiceImplTest.java | 17 ++++----- 15 files changed, 89 insertions(+), 91 deletions(-) rename src/main/java/com/photobook/{user => }/controller/UserController.java (68%) rename src/main/java/com/photobook/{user => }/dto/UserDto.java (92%) rename src/main/java/com/photobook/{user => }/mapper/UserMapper.java (79%) create mode 100644 src/main/java/com/photobook/service/LoginService.java rename src/main/java/com/photobook/{user => }/service/UserService.java (66%) create mode 100644 src/main/java/com/photobook/service/impl/LoginServiceImpl.java rename src/main/java/com/photobook/{user => }/service/impl/UserServiceImpl.java (65%) delete mode 100644 src/main/java/com/photobook/user/service/LoginService.java delete mode 100644 src/main/java/com/photobook/user/service/impl/LoginServiceImpl.java rename src/test/java/com/photobook/{user => }/service/impl/UserServiceImplTest.java (78%) diff --git a/build.gradle b/build.gradle index ef5258b..16d9f4f 100644 --- a/build.gradle +++ b/build.gradle @@ -25,8 +25,6 @@ dependencies { implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-aop' -// implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' -// implementation 'junit:junit:4.13.1' // implementation 'org.springframework.boot:spring-boot-starter-data-redis' // implementation 'org.springframework.session:spring-session-data-redis' diff --git a/src/main/java/com/photobook/aop/AuthCheckAspect.java b/src/main/java/com/photobook/aop/AuthCheckAspect.java index 48b44f8..a9d1c67 100644 --- a/src/main/java/com/photobook/aop/AuthCheckAspect.java +++ b/src/main/java/com/photobook/aop/AuthCheckAspect.java @@ -1,20 +1,17 @@ package com.photobook.aop; -import com.photobook.user.service.LoginService; import com.photobook.exception.UnauthorizedException; +import com.photobook.dto.UserDto; +import com.photobook.service.LoginService; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.stereotype.Component; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; - -import javax.servlet.http.HttpSession; @Component @Aspect public class AuthCheckAspect { - LoginService loginService; + private final LoginService loginService; public AuthCheckAspect(LoginService loginService) { this.loginService = loginService; @@ -23,15 +20,11 @@ public AuthCheckAspect(LoginService loginService) { @Before("@annotation(com.photobook.annotation.LoginCheck)") public void loginCheck() { - HttpSession httpSession = ((ServletRequestAttributes) RequestContextHolder - .currentRequestAttributes()) // RequestAttributes가 없으면 예외 발생 - .getRequest() - .getSession(); + UserDto userInfo = loginService.getLoginUserInfo(); - if (loginService.getLoginUserInfo(httpSession) == null) { + if(userInfo == null) { throw new UnauthorizedException("로그인된 사용자 정보가 존재하지 않습니다."); } - } } diff --git a/src/main/java/com/photobook/config/MyBatisConfig.java b/src/main/java/com/photobook/config/MyBatisConfig.java index b08ddc9..1d272c4 100644 --- a/src/main/java/com/photobook/config/MyBatisConfig.java +++ b/src/main/java/com/photobook/config/MyBatisConfig.java @@ -11,7 +11,7 @@ import javax.sql.DataSource; @Configuration -@MapperScan(basePackages = "com.photobook.*.mapper") +@MapperScan(basePackages = "com.photobook.mapper") public class MyBatisConfig { @Bean diff --git a/src/main/java/com/photobook/user/controller/UserController.java b/src/main/java/com/photobook/controller/UserController.java similarity index 68% rename from src/main/java/com/photobook/user/controller/UserController.java rename to src/main/java/com/photobook/controller/UserController.java index 61d569e..885a46e 100644 --- a/src/main/java/com/photobook/user/controller/UserController.java +++ b/src/main/java/com/photobook/controller/UserController.java @@ -1,13 +1,12 @@ -package com.photobook.user.controller; +package com.photobook.controller; import com.photobook.annotation.LoginCheck; -import com.photobook.user.dto.UserDto; -import com.photobook.user.service.LoginService; -import com.photobook.user.service.UserService; +import com.photobook.dto.UserDto; +import com.photobook.service.LoginService; +import com.photobook.service.UserService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.servlet.http.HttpSession; import javax.validation.constraints.NotBlank; @RestController @@ -25,16 +24,16 @@ public UserController(UserService userService, LoginService loginService) { } @PostMapping("/login") - public void login(@RequestParam @NotBlank String id, @RequestParam @NotBlank String password, HttpSession httpSession) { + public void login(@RequestParam @NotBlank String id, @RequestParam @NotBlank String password) { UserDto userInfo = userService.getUserInfoByIdAndPassword(id, password); - loginService.setLoginUserInfo(httpSession, userInfo); + loginService.setLoginUserInfo(userInfo); } @PostMapping("/logout") @LoginCheck - public void logout(HttpSession httpSession) { - loginService.removeLoginUserInfo(httpSession); + public void logout() { + loginService.removeLoginUserInfo(); } @GetMapping("/{id}") diff --git a/src/main/java/com/photobook/user/dto/UserDto.java b/src/main/java/com/photobook/dto/UserDto.java similarity index 92% rename from src/main/java/com/photobook/user/dto/UserDto.java rename to src/main/java/com/photobook/dto/UserDto.java index 80b99df..f35b837 100644 --- a/src/main/java/com/photobook/user/dto/UserDto.java +++ b/src/main/java/com/photobook/dto/UserDto.java @@ -1,4 +1,4 @@ -package com.photobook.user.dto; +package com.photobook.dto; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/photobook/exception/ExceptionAdvice.java b/src/main/java/com/photobook/exception/ExceptionAdvice.java index 1262f54..4901e45 100644 --- a/src/main/java/com/photobook/exception/ExceptionAdvice.java +++ b/src/main/java/com/photobook/exception/ExceptionAdvice.java @@ -10,6 +10,11 @@ @RestControllerAdvice public class ExceptionAdvice { + @ExceptionHandler(Exception.class) + public String exception(Exception e) { + return e.getMessage(); + } + @ExceptionHandler(IllegalArgumentException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public String illegalArgumentException(IllegalArgumentException e) { diff --git a/src/main/java/com/photobook/user/mapper/UserMapper.java b/src/main/java/com/photobook/mapper/UserMapper.java similarity index 79% rename from src/main/java/com/photobook/user/mapper/UserMapper.java rename to src/main/java/com/photobook/mapper/UserMapper.java index 4007e8c..3d7c608 100644 --- a/src/main/java/com/photobook/user/mapper/UserMapper.java +++ b/src/main/java/com/photobook/mapper/UserMapper.java @@ -1,6 +1,6 @@ -package com.photobook.user.mapper; +package com.photobook.mapper; -import com.photobook.user.dto.UserDto; +import com.photobook.dto.UserDto; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/src/main/java/com/photobook/service/LoginService.java b/src/main/java/com/photobook/service/LoginService.java new file mode 100644 index 0000000..acd9812 --- /dev/null +++ b/src/main/java/com/photobook/service/LoginService.java @@ -0,0 +1,15 @@ +package com.photobook.service; + +import com.photobook.dto.UserDto; + +import javax.servlet.http.HttpSession; + +public interface LoginService { + + void setLoginUserInfo(UserDto userDto); + + void removeLoginUserInfo(); + + UserDto getLoginUserInfo(); + +} diff --git a/src/main/java/com/photobook/user/service/UserService.java b/src/main/java/com/photobook/service/UserService.java similarity index 66% rename from src/main/java/com/photobook/user/service/UserService.java rename to src/main/java/com/photobook/service/UserService.java index d25c111..bfb4a65 100644 --- a/src/main/java/com/photobook/user/service/UserService.java +++ b/src/main/java/com/photobook/service/UserService.java @@ -1,6 +1,6 @@ -package com.photobook.user.service; +package com.photobook.service; -import com.photobook.user.dto.UserDto; +import com.photobook.dto.UserDto; public interface UserService { diff --git a/src/main/java/com/photobook/service/impl/LoginServiceImpl.java b/src/main/java/com/photobook/service/impl/LoginServiceImpl.java new file mode 100644 index 0000000..ff83d9b --- /dev/null +++ b/src/main/java/com/photobook/service/impl/LoginServiceImpl.java @@ -0,0 +1,35 @@ +package com.photobook.service.impl; + +import com.photobook.dto.UserDto; +import com.photobook.service.LoginService; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpSession; + +@Service +public class LoginServiceImpl implements LoginService { + + private static final String LOGIN_USER_INFO = "LOGIN_USER_INFO"; + + private final HttpSession httpSession; + + public LoginServiceImpl(HttpSession httpSession) { + this.httpSession = httpSession; // Scoped Proxy + } + + @Override + public void setLoginUserInfo(UserDto userDto) { + httpSession.setAttribute(LOGIN_USER_INFO, userDto); + } + + @Override + public void removeLoginUserInfo() { + httpSession.invalidate(); + } + + @Override + public UserDto getLoginUserInfo() { + return (UserDto) httpSession.getAttribute(LOGIN_USER_INFO); + } +} + diff --git a/src/main/java/com/photobook/user/service/impl/UserServiceImpl.java b/src/main/java/com/photobook/service/impl/UserServiceImpl.java similarity index 65% rename from src/main/java/com/photobook/user/service/impl/UserServiceImpl.java rename to src/main/java/com/photobook/service/impl/UserServiceImpl.java index 8d19b1f..f536709 100644 --- a/src/main/java/com/photobook/user/service/impl/UserServiceImpl.java +++ b/src/main/java/com/photobook/service/impl/UserServiceImpl.java @@ -1,9 +1,10 @@ -package com.photobook.user.service.impl; +package com.photobook.service.impl; -import com.photobook.user.mapper.UserMapper; -import com.photobook.user.dto.UserDto; -import com.photobook.user.service.UserService; +import com.photobook.mapper.UserMapper; +import com.photobook.dto.UserDto; +import com.photobook.service.UserService; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; @Service public class UserServiceImpl implements UserService { @@ -19,9 +20,7 @@ public UserDto getUserInfoByIdAndPassword(String id, String password) { UserDto userInfo = userMapper.getUserInfoByIdAndPassword(id, password); - if(userInfo == null) { - throw new IllegalArgumentException("아이디 또는 비밀번호가 잘못 입력 되었습니다."); - } + Assert.notNull(userInfo, "아이디 또는 비밀번호가 잘못 입력 되었습니다."); return userInfo; } diff --git a/src/main/java/com/photobook/user/service/LoginService.java b/src/main/java/com/photobook/user/service/LoginService.java deleted file mode 100644 index d91e788..0000000 --- a/src/main/java/com/photobook/user/service/LoginService.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.photobook.user.service; - -import com.photobook.user.dto.UserDto; - -import javax.servlet.http.HttpSession; - -public interface LoginService { - - void setLoginUserInfo(HttpSession httpSession, UserDto userDto); - - void removeLoginUserInfo(HttpSession httpSession); - - Object getLoginUserInfo(HttpSession httpSession); - -} diff --git a/src/main/java/com/photobook/user/service/impl/LoginServiceImpl.java b/src/main/java/com/photobook/user/service/impl/LoginServiceImpl.java deleted file mode 100644 index 0b008e3..0000000 --- a/src/main/java/com/photobook/user/service/impl/LoginServiceImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.photobook.user.service.impl; - -import com.photobook.user.dto.UserDto; -import com.photobook.user.service.LoginService; -import org.springframework.stereotype.Service; - -import javax.servlet.http.HttpSession; - -@Service -public class LoginServiceImpl implements LoginService { - - private static final String LOGIN_USER_INFO = "LOGIN_USER_INFO"; - - @Override - public void setLoginUserInfo(HttpSession httpSession, UserDto userDto) { - httpSession.setAttribute(LOGIN_USER_INFO, userDto); - } - - @Override - public void removeLoginUserInfo(HttpSession httpSession) { - httpSession.invalidate(); - } - - @Override - public Object getLoginUserInfo(HttpSession httpSession) { - return httpSession.getAttribute(LOGIN_USER_INFO); - } -} diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index 7fe874b..fc214ad 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -1,9 +1,9 @@ - + - + diff --git a/src/test/java/com/photobook/user/service/impl/UserServiceImplTest.java b/src/test/java/com/photobook/service/impl/UserServiceImplTest.java similarity index 78% rename from src/test/java/com/photobook/user/service/impl/UserServiceImplTest.java rename to src/test/java/com/photobook/service/impl/UserServiceImplTest.java index 3a16538..f86db93 100644 --- a/src/test/java/com/photobook/user/service/impl/UserServiceImplTest.java +++ b/src/test/java/com/photobook/service/impl/UserServiceImplTest.java @@ -1,7 +1,7 @@ -package com.photobook.user.service.impl; +package com.photobook.service.impl; -import com.photobook.user.mapper.UserMapper; -import com.photobook.user.dto.UserDto; +import com.photobook.mapper.UserMapper; +import com.photobook.dto.UserDto; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -59,14 +59,11 @@ public void failureGetUserInfoByIdAndPassword() { //given when(userMapper.getUserInfoByIdAndPassword("notExistId", "notExistPassword")).thenReturn(null); - //when - IllegalArgumentException exception = - assertThrows(IllegalArgumentException.class, () -> { - userServiceImpl.getUserInfoByIdAndPassword("notExistId", "notExistPassword"); - }); - //then - assertEquals("아이디 또는 비밀번호가 잘못 입력 되었습니다.", exception.getMessage()); + assertThrows(IllegalArgumentException.class, () -> { + //when + userServiceImpl.getUserInfoByIdAndPassword("notExistId", "notExistPassword"); + }); } } \ No newline at end of file