From 7a966c355d2345a6e984cf4fc33d7801f351999a Mon Sep 17 00:00:00 2001 From: enbraining Date: Fri, 15 Dec 2023 16:21:23 +0900 Subject: [PATCH 1/3] =?UTF-8?q?JWT=20=ED=95=84=ED=84=B0=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/controller/AuthController.java | 6 +- ...rJoinRequest.java => AuthJoinRequest.java} | 2 +- .../domain/auth/dto/AuthJoinResponse.java | 13 +++ ...oginRequest.java => AuthLoginRequest.java} | 2 +- .../domain/auth/dto/AuthLoginResponse.java | 15 +++ .../domain/auth/dto/TokenResponse.java | 21 ---- .../domain/auth/service/AuthService.java | 6 +- .../auth/service/impl/AuthServiceImpl.java | 25 +++-- .../domain/member/entity/AccessRole.java | 14 +++ .../domain/member/entity/Member.java | 27 +++-- .../weeingback/global/filter/JwtFilter.java | 35 ++---- .../weeingback/global/jwt/JwtProperties.java | 12 --- .../weeingback/global/jwt/JwtProvider.java | 100 ++++++++++++------ src/main/resources/application.yml | 3 +- 14 files changed, 158 insertions(+), 123 deletions(-) rename src/main/java/com/gapple/weeingback/domain/auth/dto/{MemberJoinRequest.java => AuthJoinRequest.java} (92%) create mode 100644 src/main/java/com/gapple/weeingback/domain/auth/dto/AuthJoinResponse.java rename src/main/java/com/gapple/weeingback/domain/auth/dto/{MemberLoginRequest.java => AuthLoginRequest.java} (90%) create mode 100644 src/main/java/com/gapple/weeingback/domain/auth/dto/AuthLoginResponse.java delete mode 100644 src/main/java/com/gapple/weeingback/domain/auth/dto/TokenResponse.java create mode 100644 src/main/java/com/gapple/weeingback/domain/member/entity/AccessRole.java delete mode 100644 src/main/java/com/gapple/weeingback/global/jwt/JwtProperties.java diff --git a/src/main/java/com/gapple/weeingback/domain/auth/controller/AuthController.java b/src/main/java/com/gapple/weeingback/domain/auth/controller/AuthController.java index b301683..f38c404 100644 --- a/src/main/java/com/gapple/weeingback/domain/auth/controller/AuthController.java +++ b/src/main/java/com/gapple/weeingback/domain/auth/controller/AuthController.java @@ -19,17 +19,17 @@ public class AuthController { private final EmailServiceImpl emailService; @PostMapping("/join") - public ResponseEntity join(@Valid @RequestBody MemberJoinRequest request){ + public ResponseEntity join(@Valid @RequestBody AuthJoinRequest request){ return authService.join(request); } @PostMapping("/login") - public ResponseEntity login(@Valid @RequestBody MemberLoginRequest request){ + public ResponseEntity login(@Valid @RequestBody AuthLoginRequest request){ return authService.login(request); } @PostMapping("/refresh") - public ResponseEntity refresh(@Valid @RequestBody TokenRequest request){ + public ResponseEntity refresh(@Valid @RequestBody TokenRequest request){ return authService.refresh(request); } diff --git a/src/main/java/com/gapple/weeingback/domain/auth/dto/MemberJoinRequest.java b/src/main/java/com/gapple/weeingback/domain/auth/dto/AuthJoinRequest.java similarity index 92% rename from src/main/java/com/gapple/weeingback/domain/auth/dto/MemberJoinRequest.java rename to src/main/java/com/gapple/weeingback/domain/auth/dto/AuthJoinRequest.java index b99c7e1..ed3f78f 100644 --- a/src/main/java/com/gapple/weeingback/domain/auth/dto/MemberJoinRequest.java +++ b/src/main/java/com/gapple/weeingback/domain/auth/dto/AuthJoinRequest.java @@ -6,7 +6,7 @@ @Getter @AllArgsConstructor -public class MemberJoinRequest { +public class AuthJoinRequest { @Pattern(regexp = "^[a-zA-Z0-9._%+-]+@gsm.hs.kr$") @NotBlank private String email; diff --git a/src/main/java/com/gapple/weeingback/domain/auth/dto/AuthJoinResponse.java b/src/main/java/com/gapple/weeingback/domain/auth/dto/AuthJoinResponse.java new file mode 100644 index 0000000..40494d2 --- /dev/null +++ b/src/main/java/com/gapple/weeingback/domain/auth/dto/AuthJoinResponse.java @@ -0,0 +1,13 @@ +package com.gapple.weeingback.domain.auth.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class AuthJoinResponse { + private String success; + private String error; +} \ No newline at end of file diff --git a/src/main/java/com/gapple/weeingback/domain/auth/dto/MemberLoginRequest.java b/src/main/java/com/gapple/weeingback/domain/auth/dto/AuthLoginRequest.java similarity index 90% rename from src/main/java/com/gapple/weeingback/domain/auth/dto/MemberLoginRequest.java rename to src/main/java/com/gapple/weeingback/domain/auth/dto/AuthLoginRequest.java index 492cfc1..f819fff 100644 --- a/src/main/java/com/gapple/weeingback/domain/auth/dto/MemberLoginRequest.java +++ b/src/main/java/com/gapple/weeingback/domain/auth/dto/AuthLoginRequest.java @@ -7,7 +7,7 @@ @Getter @AllArgsConstructor -public class MemberLoginRequest { +public class AuthLoginRequest { @Email @NotBlank private String email; diff --git a/src/main/java/com/gapple/weeingback/domain/auth/dto/AuthLoginResponse.java b/src/main/java/com/gapple/weeingback/domain/auth/dto/AuthLoginResponse.java new file mode 100644 index 0000000..2a003e2 --- /dev/null +++ b/src/main/java/com/gapple/weeingback/domain/auth/dto/AuthLoginResponse.java @@ -0,0 +1,15 @@ +package com.gapple.weeingback.domain.auth.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@AllArgsConstructor +public class AuthLoginResponse { + private String token; + + private String success; + + private String error; +} diff --git a/src/main/java/com/gapple/weeingback/domain/auth/dto/TokenResponse.java b/src/main/java/com/gapple/weeingback/domain/auth/dto/TokenResponse.java deleted file mode 100644 index 4e9822e..0000000 --- a/src/main/java/com/gapple/weeingback/domain/auth/dto/TokenResponse.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.gapple.weeingback.domain.auth.dto; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -public record TokenResponse(String access, String refresh) { - public TokenResponse(String access, String refresh) { - this.access = access; - this.refresh = refresh; - } - - @Override - public String access() { - return access; - } - - @Override - public String refresh() { - return refresh; - } -} diff --git a/src/main/java/com/gapple/weeingback/domain/auth/service/AuthService.java b/src/main/java/com/gapple/weeingback/domain/auth/service/AuthService.java index f61ced0..8cfdd97 100644 --- a/src/main/java/com/gapple/weeingback/domain/auth/service/AuthService.java +++ b/src/main/java/com/gapple/weeingback/domain/auth/service/AuthService.java @@ -4,7 +4,7 @@ import org.springframework.http.ResponseEntity; public interface AuthService { - ResponseEntity join(MemberJoinRequest request); - ResponseEntity login(MemberLoginRequest request); - ResponseEntity refresh(TokenRequest request); + ResponseEntity join(AuthJoinRequest request); + ResponseEntity login(AuthLoginRequest request); + ResponseEntity refresh(TokenRequest request); } diff --git a/src/main/java/com/gapple/weeingback/domain/auth/service/impl/AuthServiceImpl.java b/src/main/java/com/gapple/weeingback/domain/auth/service/impl/AuthServiceImpl.java index d019f4d..916a9ed 100644 --- a/src/main/java/com/gapple/weeingback/domain/auth/service/impl/AuthServiceImpl.java +++ b/src/main/java/com/gapple/weeingback/domain/auth/service/impl/AuthServiceImpl.java @@ -2,13 +2,15 @@ import com.gapple.weeingback.domain.auth.dto.*; import com.gapple.weeingback.domain.auth.service.AuthService; +import com.gapple.weeingback.domain.member.entity.AccessRole; import com.gapple.weeingback.domain.member.entity.Member; import com.gapple.weeingback.domain.member.repository.MemberRepository; import com.gapple.weeingback.global.jwt.JwtProvider; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,29 +24,38 @@ public class AuthServiceImpl implements AuthService { private final JwtProvider jwtProvider; @Transactional(rollbackFor = RuntimeException.class) - public ResponseEntity join(MemberJoinRequest req){ + public ResponseEntity join(AuthJoinRequest req){ if(!memberRepository.existsMemberByEmail(req.getEmail())) { Member member = Member.builder() .email(req.getEmail()) .password(passwordEncoder.encode(req.getPassword())) + .role(AccessRole.STUDENT) .build(); memberRepository.save(member); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(new AuthJoinResponse("ok", null)); } else throw new RuntimeException(); } @Transactional(rollbackFor = RuntimeException.class) - public ResponseEntity login(MemberLoginRequest request){ + public ResponseEntity login(AuthLoginRequest request){ Member member = memberRepository.findMemberByEmail(request.getEmail()); if(passwordEncoder.matches(request.getPassword(), member.getPassword())){ - return ResponseEntity.ok(jwtProvider.generateTokens(request.getEmail())); - } else throw new RuntimeException(); + String id = member.getId().toString(); + String role = member.getRole().getName(); + + log.info(id + " " + role); + + Authentication authentication = + new UsernamePasswordAuthenticationToken(id, role); + String token = jwtProvider.generateToken(authentication); + return ResponseEntity.ok(new AuthLoginResponse(token, "ok", null)); + } else throw new IllegalArgumentException(); } @Override - public ResponseEntity refresh(TokenRequest tokenRequest) { + public ResponseEntity refresh(TokenRequest tokenRequest) { return null; } } diff --git a/src/main/java/com/gapple/weeingback/domain/member/entity/AccessRole.java b/src/main/java/com/gapple/weeingback/domain/member/entity/AccessRole.java new file mode 100644 index 0000000..cec6922 --- /dev/null +++ b/src/main/java/com/gapple/weeingback/domain/member/entity/AccessRole.java @@ -0,0 +1,14 @@ +package com.gapple.weeingback.domain.member.entity; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum AccessRole { + STUDENT("ROLE_STUDENT"), + TEACHER("ROLE_TEACHER"), + ADMIN("ROLE_ADMIN"); + + String name; +} diff --git a/src/main/java/com/gapple/weeingback/domain/member/entity/Member.java b/src/main/java/com/gapple/weeingback/domain/member/entity/Member.java index 8483441..fa39667 100644 --- a/src/main/java/com/gapple/weeingback/domain/member/entity/Member.java +++ b/src/main/java/com/gapple/weeingback/domain/member/entity/Member.java @@ -3,17 +3,22 @@ import com.gapple.weeingback.domain.consulting.entity.Consulting; import jakarta.persistence.*; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; +import lombok.*; +import org.hibernate.annotations.GenericGenerator; + +import java.util.UUID; @Table @Entity @Builder @Getter @Setter +@NoArgsConstructor +@AllArgsConstructor public class Member { - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; + @Id + @GeneratedValue(generator = "uuid2", strategy = GenerationType.IDENTITY) + @GenericGenerator(name="uuid2", strategy = "uuid2") + private UUID id; @Column(columnDefinition = "VARCHAR(15)") private String name; @@ -24,17 +29,9 @@ public class Member { @Column(columnDefinition = "VARCHAR(80)", nullable = false) private String password; + private AccessRole role; + @OneToOne @JoinColumn(name = "consultation_id") private Consulting consulting; - - public Member(){} - - public Member(Long id, String name, String email, String password, Consulting consulting) { - this.id = id; - this.name = name; - this.email = email; - this.password = password; - this.consulting = consulting; - } } diff --git a/src/main/java/com/gapple/weeingback/global/filter/JwtFilter.java b/src/main/java/com/gapple/weeingback/global/filter/JwtFilter.java index 1816dac..d544b1f 100644 --- a/src/main/java/com/gapple/weeingback/global/filter/JwtFilter.java +++ b/src/main/java/com/gapple/weeingback/global/filter/JwtFilter.java @@ -1,54 +1,31 @@ package com.gapple.weeingback.global.filter; -import com.gapple.weeingback.domain.member.entity.Member; -import com.gapple.weeingback.domain.member.repository.MemberRepository; -import com.gapple.weeingback.global.jwt.JwtProperties; import com.gapple.weeingback.global.jwt.JwtProvider; -import io.jsonwebtoken.Claims; -import io.jsonwebtoken.ExpiredJwtException; -import io.jsonwebtoken.Jwts; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; - import java.io.IOException; -import java.nio.charset.StandardCharsets; @Slf4j @Component @RequiredArgsConstructor public class JwtFilter extends OncePerRequestFilter { - private final MemberRepository memberRepository; private final JwtProvider jwtProvider; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - String header = request.getHeader("Authorization"); - Claims authentication = null; - Member member = null; - - if(header != null && header.startsWith("Bearer ")){ - header = header.substring("Bearer ".length()); - - authentication = jwtProvider.getAuthentication(header); - - member = memberRepository.findMemberByEmail(authentication.getSubject()); - - log.info(authentication.toString()); - } - - if(member != null && SecurityContextHolder.getContext() != null){ - UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(authentication.getSubject(), member.getPassword()); + String token = request.getHeader("Authorization"); + token = jwtProvider.resolveToken(token); - SecurityContextHolder.getContext().setAuthentication(authenticationToken); + if (jwtProvider.validateToken(token)) { + Authentication authentication = jwtProvider.getAuthentication(token); + SecurityContextHolder.getContext().setAuthentication(authentication); } filterChain.doFilter(request, response); diff --git a/src/main/java/com/gapple/weeingback/global/jwt/JwtProperties.java b/src/main/java/com/gapple/weeingback/global/jwt/JwtProperties.java deleted file mode 100644 index 93dab71..0000000 --- a/src/main/java/com/gapple/weeingback/global/jwt/JwtProperties.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.gapple.weeingback.global.jwt; - -import io.jsonwebtoken.security.Keys; - -import javax.crypto.SecretKey; -import java.nio.charset.StandardCharsets; - -public class JwtProperties { - public static final String HEADER = "Authorization"; - public static final String PREFIX = "Bearer"; - public static final int EXPIRED = 86400; -} diff --git a/src/main/java/com/gapple/weeingback/global/jwt/JwtProvider.java b/src/main/java/com/gapple/weeingback/global/jwt/JwtProvider.java index 90868a9..84e68ab 100644 --- a/src/main/java/com/gapple/weeingback/global/jwt/JwtProvider.java +++ b/src/main/java/com/gapple/weeingback/global/jwt/JwtProvider.java @@ -1,49 +1,89 @@ package com.gapple.weeingback.global.jwt; - import com.gapple.weeingback.domain.auth.dto.TokenResponse; - import io.jsonwebtoken.Claims; + import com.gapple.weeingback.domain.member.entity.AccessRole; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; - import io.jsonwebtoken.io.Encoders; - import io.jsonwebtoken.security.Keys; + import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Value; + import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; + import org.springframework.security.core.Authentication; + import org.springframework.security.core.GrantedAuthority; import org.springframework.stereotype.Component; + import java.util.Collection; + import java.util.Date; - import java.sql.Date; - import java.time.Instant; - import java.time.temporal.ChronoUnit; + import static org.springframework.security.core.authority.AuthorityUtils.createAuthorityList; @Component public class JwtProvider { - private String secret; + private String secretKey; + private Long expired; - public JwtProvider(@Value("${jwt.secret}") String secret){ - this.secret = secret; + public JwtProvider(@Value("${jwt.secret}") String secretKey, + @Value("${jwt.expired}") Long expired){ + this.secretKey = secretKey; + this.expired = expired; } - public TokenResponse generateTokens(String email){ - return new TokenResponse(generateToken(email), generateToken(email)); + public String generateToken(Authentication authentication) { + return generateToken(authentication.getPrincipal().toString(), authentication.getAuthorities()); } - public String generateToken(String email){ - Instant issuedAt = Instant.now(); - Instant expirtion = issuedAt.plus(JwtProperties.EXPIRED, ChronoUnit.SECONDS); - return Jwts.builder() - .signWith(Keys.hmacShaKeyFor(secret.getBytes()),SignatureAlgorithm.HS256) - .setSubject(email) - .setIssuedAt(Date.from(issuedAt)) - .setExpiration(Date.from(expirtion)) - .compact(); - } - public Claims getAuthentication(String token) { - return Jwts.parserBuilder() - .setSigningKey(secret.getBytes()) - .build() - .parseClaimsJws(token) - .getBody(); + public String generateToken(String username, Collection authorities) { + return Jwts.builder() + .setSubject(username) + .claim("role", authorities) + .setExpiration(getExpireDate()) + .signWith(SignatureAlgorithm.HS256, secretKey) + .compact(); } - public String getSecret() { - return secret; + private Date getExpireDate() { + Date now = new Date(); + return new Date(now.getTime() + expired); + } + + public String resolveToken(String token) { + if(token != null && token.startsWith("Bearer ")){ + return token.substring(7); + } else return null; + } + + public Authentication getAuthentication(String accessToken) { + return new UsernamePasswordAuthenticationToken(getUsername(accessToken), "", createAuthorityList(getRole(accessToken))); + } + + private String getUsername(String accessToken) { + return Jwts.parser() + .setSigningKey(secretKey) + .parseClaimsJws(accessToken) + .getBody() + .getSubject(); + } + + private String getRole(String accessToken) { + return (String) Jwts.parser() + .setSigningKey(secretKey) + .parseClaimsJws(accessToken) + .getBody() + .get("role", String.class); + } + + public boolean validateToken(String accessToken) { + if (accessToken == null) { + return false; + } + + try { + return Jwts.parser() + .setSigningKey(secretKey) + .parseClaimsJws(accessToken) + .getBody() + .getExpiration() + .after(new Date()); + } + catch (Exception e) { + return false; + } } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7be6235..4138df1 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -31,4 +31,5 @@ spring: password: 1 jwt: - secret: MjFmcnlmc2RmamE3OXlZRnNkRnN5ZGY5eWZzZGhnSGdxZWc0Mwo= \ No newline at end of file + secret: MjFmcnlmc2RmamE3OXlZRnNkRnN5ZGY5eWZzZGhnSGdxZWc0Mwo= + expired: 86400 \ No newline at end of file From 9571c78304a1a913bc4985eebe40a2ca0e06ca29 Mon Sep 17 00:00:00 2001 From: enbraining Date: Fri, 15 Dec 2023 20:41:51 +0900 Subject: [PATCH 2/3] =?UTF-8?q?jwt=20=ED=86=A0=ED=81=B0=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B0=9C=EC=84=A0=20=EB=B0=8F=20=EC=83=81=EB=8B=B4?= =?UTF-8?q?=ED=99=95=EC=9D=B8=EC=84=9C=20=EC=A0=9C=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/controller/AuthController.java | 8 +------ .../domain/auth/dto/TokenRequest.java | 21 ------------------- .../domain/auth/service/AuthService.java | 1 - .../auth/service/impl/AuthServiceImpl.java | 7 +------ .../controller/ConsultingController.java | 6 +++--- .../domain/consulting/entity/Consulting.java | 8 ++----- .../dto/request/ConsultingSubmitRequest.java | 6 +++--- .../dto/request/ConsultingSubmitResponse.java | 12 +++++++++++ .../consulting/service/ConsultingService.java | 4 +++- .../implementation/ConsultingServiceImpl.java | 19 +++++++++++------ .../member/repository/MemberRepository.java | 4 ++++ .../weeingback/global/jwt/JwtProvider.java | 6 +++--- 12 files changed, 45 insertions(+), 57 deletions(-) delete mode 100644 src/main/java/com/gapple/weeingback/domain/auth/dto/TokenRequest.java create mode 100644 src/main/java/com/gapple/weeingback/domain/consulting/entity/dto/request/ConsultingSubmitResponse.java diff --git a/src/main/java/com/gapple/weeingback/domain/auth/controller/AuthController.java b/src/main/java/com/gapple/weeingback/domain/auth/controller/AuthController.java index f38c404..2c23b84 100644 --- a/src/main/java/com/gapple/weeingback/domain/auth/controller/AuthController.java +++ b/src/main/java/com/gapple/weeingback/domain/auth/controller/AuthController.java @@ -19,7 +19,7 @@ public class AuthController { private final EmailServiceImpl emailService; @PostMapping("/join") - public ResponseEntity join(@Valid @RequestBody AuthJoinRequest request){ + public ResponseEntity join(@Valid @RequestBody AuthJoinRequest request){ return authService.join(request); } @@ -27,12 +27,6 @@ public ResponseEntity join(@Valid @RequestBody AuthJoinRequest request){ public ResponseEntity login(@Valid @RequestBody AuthLoginRequest request){ return authService.login(request); } - - @PostMapping("/refresh") - public ResponseEntity refresh(@Valid @RequestBody TokenRequest request){ - return authService.refresh(request); - } - @PostMapping("/mailauth") public ResponseEntity emailCertify(@Valid @RequestBody EmailCertifyRequest request){ return ResponseEntity.ok(emailService.sendMail(request.getEmail())); diff --git a/src/main/java/com/gapple/weeingback/domain/auth/dto/TokenRequest.java b/src/main/java/com/gapple/weeingback/domain/auth/dto/TokenRequest.java deleted file mode 100644 index 0e735b0..0000000 --- a/src/main/java/com/gapple/weeingback/domain/auth/dto/TokenRequest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.gapple.weeingback.domain.auth.dto; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -public record TokenRequest(String access, String refresh) { - public TokenRequest(String access, String refresh) { - this.access = access; - this.refresh = refresh; - } - - @Override - public String access() { - return access; - } - - @Override - public String refresh() { - return refresh; - } -} diff --git a/src/main/java/com/gapple/weeingback/domain/auth/service/AuthService.java b/src/main/java/com/gapple/weeingback/domain/auth/service/AuthService.java index 8cfdd97..327b102 100644 --- a/src/main/java/com/gapple/weeingback/domain/auth/service/AuthService.java +++ b/src/main/java/com/gapple/weeingback/domain/auth/service/AuthService.java @@ -6,5 +6,4 @@ public interface AuthService { ResponseEntity join(AuthJoinRequest request); ResponseEntity login(AuthLoginRequest request); - ResponseEntity refresh(TokenRequest request); } diff --git a/src/main/java/com/gapple/weeingback/domain/auth/service/impl/AuthServiceImpl.java b/src/main/java/com/gapple/weeingback/domain/auth/service/impl/AuthServiceImpl.java index 916a9ed..9448977 100644 --- a/src/main/java/com/gapple/weeingback/domain/auth/service/impl/AuthServiceImpl.java +++ b/src/main/java/com/gapple/weeingback/domain/auth/service/impl/AuthServiceImpl.java @@ -43,7 +43,7 @@ public ResponseEntity login(AuthLoginRequest request){ if(passwordEncoder.matches(request.getPassword(), member.getPassword())){ String id = member.getId().toString(); - String role = member.getRole().getName(); + String role = member.getRole().toString(); log.info(id + " " + role); @@ -53,9 +53,4 @@ public ResponseEntity login(AuthLoginRequest request){ return ResponseEntity.ok(new AuthLoginResponse(token, "ok", null)); } else throw new IllegalArgumentException(); } - - @Override - public ResponseEntity refresh(TokenRequest tokenRequest) { - return null; - } } diff --git a/src/main/java/com/gapple/weeingback/domain/consulting/controller/ConsultingController.java b/src/main/java/com/gapple/weeingback/domain/consulting/controller/ConsultingController.java index 171fe00..df9b5a4 100644 --- a/src/main/java/com/gapple/weeingback/domain/consulting/controller/ConsultingController.java +++ b/src/main/java/com/gapple/weeingback/domain/consulting/controller/ConsultingController.java @@ -1,5 +1,6 @@ package com.gapple.weeingback.domain.consulting.controller; +import com.gapple.weeingback.domain.consulting.entity.dto.request.ConsultingSubmitResponse; import com.gapple.weeingback.domain.consulting.service.implementation.ConsultingServiceImpl; import jakarta.validation.Valid; import org.springframework.http.HttpStatus; @@ -18,8 +19,7 @@ public class ConsultingController { private final ConsultingServiceImpl service; @PostMapping("/submit") - public ResponseEntity submitOkay(@Valid @RequestBody ConsultingSubmitRequest request){ - service.submitConsulting(request); - return new ResponseEntity<>(HttpStatus.ACCEPTED); + public ResponseEntity submitOkay(@Valid @RequestBody ConsultingSubmitRequest request){ + return service.submitConsulting(request); } } diff --git a/src/main/java/com/gapple/weeingback/domain/consulting/entity/Consulting.java b/src/main/java/com/gapple/weeingback/domain/consulting/entity/Consulting.java index 85255be..b14894a 100644 --- a/src/main/java/com/gapple/weeingback/domain/consulting/entity/Consulting.java +++ b/src/main/java/com/gapple/weeingback/domain/consulting/entity/Consulting.java @@ -1,15 +1,13 @@ package com.gapple.weeingback.domain.consulting.entity; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; +import lombok.*; @Table @Entity @Builder @Getter @Setter +@NoArgsConstructor @AllArgsConstructor public class Consulting { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -28,6 +26,4 @@ public Consulting(Long issuedAt, Long startAt){ this.issuedAt = issuedAt; this.startAt = startAt; } - - public Consulting(){} } diff --git a/src/main/java/com/gapple/weeingback/domain/consulting/entity/dto/request/ConsultingSubmitRequest.java b/src/main/java/com/gapple/weeingback/domain/consulting/entity/dto/request/ConsultingSubmitRequest.java index 2463f0f..282ec1a 100644 --- a/src/main/java/com/gapple/weeingback/domain/consulting/entity/dto/request/ConsultingSubmitRequest.java +++ b/src/main/java/com/gapple/weeingback/domain/consulting/entity/dto/request/ConsultingSubmitRequest.java @@ -1,12 +1,12 @@ package com.gapple.weeingback.domain.consulting.entity.dto.request; -import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; @Getter +@NoArgsConstructor @AllArgsConstructor public class ConsultingSubmitRequest { - @NotBlank - private Long startAt; + private Long startat; } diff --git a/src/main/java/com/gapple/weeingback/domain/consulting/entity/dto/request/ConsultingSubmitResponse.java b/src/main/java/com/gapple/weeingback/domain/consulting/entity/dto/request/ConsultingSubmitResponse.java new file mode 100644 index 0000000..bf23968 --- /dev/null +++ b/src/main/java/com/gapple/weeingback/domain/consulting/entity/dto/request/ConsultingSubmitResponse.java @@ -0,0 +1,12 @@ +package com.gapple.weeingback.domain.consulting.entity.dto.request; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ConsultingSubmitResponse { + private String success; +} diff --git a/src/main/java/com/gapple/weeingback/domain/consulting/service/ConsultingService.java b/src/main/java/com/gapple/weeingback/domain/consulting/service/ConsultingService.java index 88be6f7..c113b87 100644 --- a/src/main/java/com/gapple/weeingback/domain/consulting/service/ConsultingService.java +++ b/src/main/java/com/gapple/weeingback/domain/consulting/service/ConsultingService.java @@ -1,7 +1,9 @@ package com.gapple.weeingback.domain.consulting.service; import com.gapple.weeingback.domain.consulting.entity.dto.request.ConsultingSubmitRequest; +import com.gapple.weeingback.domain.consulting.entity.dto.request.ConsultingSubmitResponse; +import org.springframework.http.ResponseEntity; public interface ConsultingService { - void submitConsulting(ConsultingSubmitRequest request); + ResponseEntity submitConsulting(ConsultingSubmitRequest request); } diff --git a/src/main/java/com/gapple/weeingback/domain/consulting/service/implementation/ConsultingServiceImpl.java b/src/main/java/com/gapple/weeingback/domain/consulting/service/implementation/ConsultingServiceImpl.java index 1d5d52a..3fe5267 100644 --- a/src/main/java/com/gapple/weeingback/domain/consulting/service/implementation/ConsultingServiceImpl.java +++ b/src/main/java/com/gapple/weeingback/domain/consulting/service/implementation/ConsultingServiceImpl.java @@ -2,15 +2,19 @@ import com.gapple.weeingback.domain.consulting.entity.Consulting; import com.gapple.weeingback.domain.consulting.entity.dto.request.ConsultingSubmitRequest; +import com.gapple.weeingback.domain.consulting.entity.dto.request.ConsultingSubmitResponse; import com.gapple.weeingback.domain.consulting.service.ConsultingService; import com.gapple.weeingback.domain.member.entity.Member; import com.gapple.weeingback.domain.member.repository.MemberRepository; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import java.time.Instant; +import java.util.UUID; @Service @RequiredArgsConstructor @@ -18,13 +22,16 @@ public class ConsultingServiceImpl implements ConsultingService { private final MemberRepository memberRepository; @Transactional - public void submitConsulting(ConsultingSubmitRequest request){ - String email = SecurityContextHolder.getContext().getAuthentication().getName(); - Member member = memberRepository.findMemberByEmail(email); - Consulting consulting = member.getConsulting(); - consulting.setIssuedAt(Instant.now().toEpochMilli()); - consulting.setStartAt(request.getStartAt()); + public ResponseEntity submitConsulting(ConsultingSubmitRequest request){ + String id = SecurityContextHolder.getContext().getAuthentication().getName(); + Member member = memberRepository.findMemberById(UUID.fromString(id)); + + if(member.getConsulting() != null){ + member.setConsulting(new Consulting(Instant.now().toEpochMilli(), request.getStartat())); + } memberRepository.save(member); + + return ResponseEntity.accepted().body(new ConsultingSubmitResponse("okay")); } } diff --git a/src/main/java/com/gapple/weeingback/domain/member/repository/MemberRepository.java b/src/main/java/com/gapple/weeingback/domain/member/repository/MemberRepository.java index 07c2cd1..d390ed7 100644 --- a/src/main/java/com/gapple/weeingback/domain/member/repository/MemberRepository.java +++ b/src/main/java/com/gapple/weeingback/domain/member/repository/MemberRepository.java @@ -3,7 +3,11 @@ import com.gapple.weeingback.domain.member.entity.Member; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.UUID; + public interface MemberRepository extends JpaRepository { boolean existsMemberByEmail(String email); Member findMemberByEmail(String email); + + Member findMemberById(UUID id); } diff --git a/src/main/java/com/gapple/weeingback/global/jwt/JwtProvider.java b/src/main/java/com/gapple/weeingback/global/jwt/JwtProvider.java index 84e68ab..4d13b84 100644 --- a/src/main/java/com/gapple/weeingback/global/jwt/JwtProvider.java +++ b/src/main/java/com/gapple/weeingback/global/jwt/JwtProvider.java @@ -26,13 +26,13 @@ public JwtProvider(@Value("${jwt.secret}") String secretKey, } public String generateToken(Authentication authentication) { - return generateToken(authentication.getPrincipal().toString(), authentication.getAuthorities()); + return generateToken(authentication.getPrincipal().toString(), authentication.getCredentials().toString()); } - public String generateToken(String username, Collection authorities) { + public String generateToken(String username, String role) { return Jwts.builder() .setSubject(username) - .claim("role", authorities) + .claim("role", role) .setExpiration(getExpireDate()) .signWith(SignatureAlgorithm.HS256, secretKey) .compact(); From a7126e1ccf2f37ab2ae43342a23be156979af43d Mon Sep 17 00:00:00 2001 From: enbraining Date: Fri, 15 Dec 2023 21:10:40 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=EC=8B=9C=EA=B0=84=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=83=81=EB=8B=B4=ED=99=95=EC=9D=B8=EC=84=9C=EC=9D=98=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=EC=9D=84=20=EB=82=98=ED=83=80=EB=82=B4?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EA=B3=A0=20=EA=B5=90=EC=8B=9C=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EB=90=98=EC=97=88=EC=8A=B5=EB=8B=88=EB=8B=A4?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/consulting/entity/Consulting.java | 10 +++++----- .../entity/dto/request/ConsultingSubmitRequest.java | 2 +- .../service/implementation/ConsultingServiceImpl.java | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gapple/weeingback/domain/consulting/entity/Consulting.java b/src/main/java/com/gapple/weeingback/domain/consulting/entity/Consulting.java index b14894a..4e4c3bf 100644 --- a/src/main/java/com/gapple/weeingback/domain/consulting/entity/Consulting.java +++ b/src/main/java/com/gapple/weeingback/domain/consulting/entity/Consulting.java @@ -14,16 +14,16 @@ public class Consulting { private Long id; @Column(nullable = false) - private Long issuedAt; // 상담 신청 일자 + private Long issuedAt; @Column(nullable = false) - private Long startAt; // 언제 가야하는지 + private int classTime; @Column(nullable = false) - private boolean isAccess; // 선생님이 승인했는지 + private boolean isAccess; - public Consulting(Long issuedAt, Long startAt){ + public Consulting(Long issuedAt, int classTime){ this.issuedAt = issuedAt; - this.startAt = startAt; + this.classTime = classTime; } } diff --git a/src/main/java/com/gapple/weeingback/domain/consulting/entity/dto/request/ConsultingSubmitRequest.java b/src/main/java/com/gapple/weeingback/domain/consulting/entity/dto/request/ConsultingSubmitRequest.java index 282ec1a..9f22ba3 100644 --- a/src/main/java/com/gapple/weeingback/domain/consulting/entity/dto/request/ConsultingSubmitRequest.java +++ b/src/main/java/com/gapple/weeingback/domain/consulting/entity/dto/request/ConsultingSubmitRequest.java @@ -8,5 +8,5 @@ @NoArgsConstructor @AllArgsConstructor public class ConsultingSubmitRequest { - private Long startat; + private int classTime; } diff --git a/src/main/java/com/gapple/weeingback/domain/consulting/service/implementation/ConsultingServiceImpl.java b/src/main/java/com/gapple/weeingback/domain/consulting/service/implementation/ConsultingServiceImpl.java index 3fe5267..8eee82a 100644 --- a/src/main/java/com/gapple/weeingback/domain/consulting/service/implementation/ConsultingServiceImpl.java +++ b/src/main/java/com/gapple/weeingback/domain/consulting/service/implementation/ConsultingServiceImpl.java @@ -27,7 +27,7 @@ public ResponseEntity submitConsulting(ConsultingSubmi Member member = memberRepository.findMemberById(UUID.fromString(id)); if(member.getConsulting() != null){ - member.setConsulting(new Consulting(Instant.now().toEpochMilli(), request.getStartat())); + member.setConsulting(new Consulting(Instant.now().toEpochMilli(), request.getClassTime())); } memberRepository.save(member);