Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,6 @@ out/
.vscode/

application.yml
application.properties
application.properties
logback.xml
log/
7 changes: 7 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,13 @@ dependencies {
implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
//firebase
implementation group: 'com.google.firebase', name: 'firebase-admin', version: '8.1.0'
//cache
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-cache'
//ELK
implementation group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: '6.3'
//junit

}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableCaching
@EnableJpaAuditing
@SpringBootApplication
public class UnderTheSeaServerApplication {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
//package com.example.UnderTheSea_Server.controller;
//
//import com.example.UnderTheSea_Server.config.BaseException;
//import com.example.UnderTheSea_Server.config.BaseResponse;
//import com.example.UnderTheSea_Server.model.PostGUserReq;
//import com.example.UnderTheSea_Server.model.PostUserRes;
//import com.fasterxml.jackson.core.JsonProcessingException;
//import com.google.auth.oauth2.GoogleCredentials;
//import com.google.firebase.FirebaseApp;
//import com.google.firebase.FirebaseOptions;
//import com.google.firebase.auth.FirebaseAuth;
//import lombok.RequiredArgsConstructor;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import javax.annotation.PostConstruct;
//import javax.servlet.http.HttpServletResponse;
//import java.io.FileInputStream;
//@Configuration
//@RestController
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@

import com.example.UnderTheSea_Server.config.BaseException;
import com.example.UnderTheSea_Server.config.BaseResponse;
import com.example.UnderTheSea_Server.model.PostPlanRes;
import com.example.UnderTheSea_Server.model.PostUserReq;
import com.example.UnderTheSea_Server.model.PostUserRes;
import com.example.UnderTheSea_Server.service.KakaoUserService;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import lombok.RequiredArgsConstructor;

Expand All @@ -16,6 +17,7 @@
@RequiredArgsConstructor
public class KakaoLoginController {
private final KakaoUserService kakaoUserService;
private final Logger logger = LoggerFactory.getLogger(this.getClass());

/**
* Post User API (kakao)
Expand All @@ -26,6 +28,7 @@ public class KakaoLoginController {
public BaseResponse<PostUserRes> kakaoLogin(@RequestBody PostUserReq postUserReq, HttpServletResponse response) throws JsonProcessingException {
try {
PostUserRes postUserRes = kakaoUserService.kakaoLogin(postUserReq, response);
logger.debug("debug level test: " + postUserRes.userId);
return new BaseResponse<>(postUserRes);
} catch(BaseException exception){
return new BaseResponse<>((exception.getStatus()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.example.UnderTheSea_Server.model.*;
import com.example.UnderTheSea_Server.service.PlanService;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.example.UnderTheSea_Server.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
* 권한 확인을 위한 테스트 API
*/
@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {


@RequestMapping(value = "/permitAll", method = RequestMethod.GET)
public ResponseEntity<String> permitAll() {
return ResponseEntity.ok("누구나 접근이 가능합니다.\n");
}

@RequestMapping(value = "/authenticated", method = RequestMethod.GET)
public ResponseEntity<String> authenticated(@RequestHeader String Authorization) {
log.debug(Authorization);
return ResponseEntity.ok("로그인한 사람 누구나 가능합니다.\n");
}

@PreAuthorize("hasAnyRole('User')")
@RequestMapping(value = "/user", method = RequestMethod.GET)
public ResponseEntity<String> user() {
return ResponseEntity.ok("user 가능합니다.\n");
}

@PreAuthorize("hasAnyRole('Admin')")
@RequestMapping(value = "/admin", method = RequestMethod.GET)
public ResponseEntity<String> admin(@RequestHeader String Authorization) {
log.debug(Authorization);
return ResponseEntity.ok("admin 가능합니다.\n");
}

}
40 changes: 0 additions & 40 deletions src/main/java/com/example/UnderTheSea_Server/domain/Quiz.java
Original file line number Diff line number Diff line change
@@ -1,40 +0,0 @@
package com.example.UnderTheSea_Server.domain;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.annotations.ColumnDefault;

import javax.persistence.*;
import java.util.Date;

@Entity
@Getter
@Setter
@NoArgsConstructor
@Table(name = "Quiz")
public class Quiz {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long quiz_id;

@Column(nullable = false)
private String content;

@Column(nullable = false)
private String question;

@Column(nullable = false)
private String answer;

@Column(nullable = false)
private String option;

@Temporal(value = TemporalType.TIMESTAMP)
@Column(nullable = false)
private Date created_at;

@Temporal(value = TemporalType.TIMESTAMP)
@Column(nullable = false)
private Date updated_at;
}
24 changes: 17 additions & 7 deletions src/main/java/com/example/UnderTheSea_Server/domain/User.java
Original file line number Diff line number Diff line change
@@ -1,26 +1,23 @@
package com.example.UnderTheSea_Server.domain;

import io.swagger.annotations.Contact;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.*;
import org.hibernate.annotations.ColumnDefault;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

@Data
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "User")
@JsonIgnoreProperties(ignoreUnknown =true)
public class User implements UserDetails{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down Expand Up @@ -57,6 +54,7 @@ public class User implements UserDetails{
@Column(nullable = false)
private Date updated_at;

@JsonIgnoreProperties(ignoreUnknown =true)
@Builder
public User(Long user_id, String email, String nickname, String profileImgUrl, Long character_id, String character_name, Long mileage, UserStatus status, Date created_at, Date updated_at) {
this.userId = user_id;
Expand All @@ -71,42 +69,54 @@ public User(Long user_id, String email, String nickname, String profileImgUrl, L
this.updated_at = updated_at;
}

/*
@JsonIgnoreProperties(ignoreUnknown =true)
@ElementCollection(fetch = FetchType.EAGER)
private List<String> roles = new ArrayList<>();
*/


@JsonIgnoreProperties(ignoreUnknown =true)
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return null;
/*
return this.roles.stream()
.map(SimpleGrantedAuthority::new)
.collect(Collectors.toList());
*/
}

@JsonIgnoreProperties(ignoreUnknown =true)
@Override
public String getPassword() {
return null;
}

@JsonIgnoreProperties(ignoreUnknown =true)
@Override
public String getUsername() {
return userId.toString();
}

@JsonIgnoreProperties(ignoreUnknown =true)
@Override
public boolean isAccountNonExpired() {
return true;
}

@JsonIgnoreProperties(ignoreUnknown =true)
@Override
public boolean isAccountNonLocked() {
return true;
}

@JsonIgnoreProperties(ignoreUnknown =true)
@Override
public boolean isCredentialsNonExpired() {
return true;
}

@JsonIgnoreProperties(ignoreUnknown =true)
@Override
public boolean isEnabled() {
return true;
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/com/example/UnderTheSea_Server/dto/UserDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.example.UnderTheSea_Server.domain.User;
import com.example.UnderTheSea_Server.domain.UserStatus;
import com.example.UnderTheSea_Server.jwt.RefreshToken;
import org.springframework.stereotype.Repository;

import java.sql.Timestamp;
Expand All @@ -23,4 +24,11 @@ public User insertUser(String email, String nickname, String profile) {
.build();
return userEntity;
}

public RefreshToken insertRefreshToken(String token) {
RefreshToken refreshTokenEntity = RefreshToken.builder()
.refreshToken(token)
.build();
return refreshTokenEntity;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import lombok.RequiredArgsConstructor;
import org.springframework.boot.autoconfigure.neo4j.Neo4jProperties;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.filter.GenericFilterBean;
Expand All @@ -11,23 +12,41 @@
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@RequiredArgsConstructor
public class JwtAuthenticationFilter extends GenericFilterBean {
private final JwtTokenProvider jwtTokenProvider;
private final RefreshTokenRepository refreshTokenRepository;

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//헤더에서 jwt 받아오기
String token = jwtTokenProvider.resolveToken((HttpServletRequest) request);
String token = jwtTokenProvider.resolveToken((HttpServletRequest) request);//.split(" ")[1];
//System.out.println(token.split(" ")[1]);
//유효한 토큰인지 확인
if(token != null && jwtTokenProvider.validateToken(token)){
//토큰 유효하면 토큰으로부터 유저 정보 받아오기
System.out.println("mp");
//토큰 유효하면 토큰으로부터 유저 정보 받아오기 <인증>
Authentication authentication = jwtTokenProvider.getAuthentication(token);
//SecurityContext에 Authentication 객체 저장
System.out.println("nono");
//SecurityContext에 Authentication 객체 저장 <인가>
SecurityContextHolder.getContext().setAuthentication(authentication);
}
else if(!jwtTokenProvider.validateToken(token)){
String refresh = jwtTokenProvider.resolveRefreshToken((HttpServletRequest) request);
if(refresh != null){
RefreshToken refreshToken = refreshTokenRepository.findByRefreshToken(refresh).get();
String accessToken = jwtTokenProvider.validateRefreshToken(refreshToken, (HttpServletResponse) response);
if(accessToken != null) {
//토큰 유효하면 토큰으로부터 유저 정보 받아오기
Authentication authentication = jwtTokenProvider.getAuthentication(accessToken);
//SecurityContext에 Authentication 객체 저장
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
}
chain.doFilter(request, response);
}
}
Loading