-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #11 from TUK-MoreView/Feat/3-login-jwt
pr Feat/3 login jwt
- Loading branch information
Showing
42 changed files
with
1,037 additions
and
686 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
43 changes: 0 additions & 43 deletions
43
src/main/java/com/example/moreveiw/domain/member/controller/MemberApiController.java
This file was deleted.
Oops, something went wrong.
59 changes: 59 additions & 0 deletions
59
src/main/java/com/example/moreveiw/domain/member/controller/MemberController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
package com.example.moreveiw.domain.member.controller; | ||
|
||
import com.example.moreveiw.domain.member.model.dto.TokenDto; | ||
import com.example.moreveiw.domain.member.model.dto.request.MemberLoginRequest; | ||
import com.example.moreveiw.domain.member.model.dto.request.MemberRequest; | ||
import com.example.moreveiw.domain.member.model.dto.response.MemberResponse; | ||
import com.example.moreveiw.domain.member.service.MemberService; | ||
import com.example.moreveiw.global.security.jwt.JwtFilter; | ||
import com.example.moreveiw.global.security.jwt.TokenProvider; | ||
import jakarta.servlet.http.HttpServletRequest; | ||
import jakarta.validation.Valid; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.HttpHeaders; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.security.access.prepost.PreAuthorize; | ||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; | ||
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; | ||
import org.springframework.security.core.Authentication; | ||
import org.springframework.security.core.context.SecurityContextHolder; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
@RestController | ||
@RequestMapping("/api") | ||
@RequiredArgsConstructor | ||
public class MemberController { | ||
|
||
private final TokenProvider tokenProvider; | ||
private final AuthenticationManagerBuilder authenticationManagerBuilder; | ||
private final MemberService memberService; | ||
|
||
@PostMapping("/sign-in") | ||
public ResponseEntity<MemberResponse> signIn(@Valid @RequestBody MemberRequest request) { | ||
return ResponseEntity.ok(memberService.signup(request)); | ||
} | ||
|
||
@PostMapping("/login") | ||
public ResponseEntity<TokenDto> authorize(@Valid @RequestBody MemberLoginRequest request) { | ||
|
||
UsernamePasswordAuthenticationToken authenticationToken = | ||
new UsernamePasswordAuthenticationToken(request.getEmail(), request.getPassword()); | ||
|
||
Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); | ||
SecurityContextHolder.getContext().setAuthentication(authentication); | ||
|
||
String jwt = tokenProvider.createToken(authentication); | ||
|
||
HttpHeaders httpHeaders = new HttpHeaders(); | ||
httpHeaders.add(JwtFilter.AUTHORIZATION_HEADER, "Bearer " + jwt); | ||
|
||
return new ResponseEntity<>(new TokenDto(jwt), httpHeaders, HttpStatus.OK); | ||
} | ||
|
||
@GetMapping("/user") | ||
@PreAuthorize("hasAnyRole('USER','ADMIN')") | ||
public ResponseEntity<MemberResponse> getMyUserInfo(HttpServletRequest request) { | ||
return ResponseEntity.ok(memberService.getMyMemberWithAuthorities()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 20 additions & 0 deletions
20
src/main/java/com/example/moreveiw/domain/member/exception/DuplicateMemberException.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package com.example.moreveiw.domain.member.exception; | ||
|
||
public class DuplicateMemberException extends RuntimeException { | ||
|
||
public DuplicateMemberException() { | ||
super(); | ||
} | ||
|
||
public DuplicateMemberException(String message, Throwable cause) { | ||
super(message, cause); | ||
} | ||
|
||
public DuplicateMemberException(String message) { | ||
super(message); | ||
} | ||
|
||
public DuplicateMemberException(Throwable cause) { | ||
super(cause); | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
src/main/java/com/example/moreveiw/domain/member/exception/NotFoundMemberException.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package com.example.moreveiw.domain.member.exception; | ||
|
||
public class NotFoundMemberException extends RuntimeException { | ||
|
||
public NotFoundMemberException() { | ||
super(); | ||
} | ||
|
||
public NotFoundMemberException(String message, Throwable cause) { | ||
super(message, cause); | ||
} | ||
|
||
public NotFoundMemberException(String message) { | ||
super(message); | ||
} | ||
|
||
public NotFoundMemberException(Throwable cause) { | ||
super(cause); | ||
} | ||
} |
18 changes: 18 additions & 0 deletions
18
src/main/java/com/example/moreveiw/domain/member/model/dao/Authority.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package com.example.moreveiw.domain.member.model.dao; | ||
|
||
import jakarta.persistence.*; | ||
import lombok.*; | ||
|
||
@Entity | ||
@Table(name = "authority") | ||
@Getter | ||
@Setter | ||
@AllArgsConstructor | ||
@NoArgsConstructor | ||
@Builder | ||
public class Authority { | ||
|
||
@Id | ||
@Column(name = "authority_name", length = 50) | ||
private String authorityName; | ||
} |
26 changes: 12 additions & 14 deletions
26
src/main/java/com/example/moreveiw/domain/member/model/dao/Member.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,38 +1,36 @@ | ||
package com.example.moreveiw.domain.member.model.dao; | ||
|
||
import com.example.moreveiw.domain.base.BaseEntity; | ||
import com.example.moreveiw.domain.member.editor.MemberEditor; | ||
import jakarta.persistence.Entity; | ||
import jakarta.persistence.GeneratedValue; | ||
import jakarta.persistence.GenerationType; | ||
import jakarta.persistence.Id; | ||
import jakarta.persistence.*; | ||
import jakarta.validation.constraints.Email; | ||
import lombok.*; | ||
|
||
import java.util.Set; | ||
|
||
@Entity | ||
@Getter | ||
@Builder | ||
@Entity | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
@AllArgsConstructor | ||
public class Member extends BaseEntity { | ||
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
@Column(name = "user_id") | ||
private Long id; | ||
|
||
private String memberName; | ||
|
||
private String name; | ||
private String password; | ||
|
||
private String email; | ||
|
||
private String role; | ||
|
||
public MemberEditor.MemberEditorBuilder toEditor() { | ||
return MemberEditor.builder() | ||
.name(name) | ||
.email(email); | ||
} | ||
|
||
@JoinTable( | ||
name = "user_authority", | ||
joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "user_id")}, | ||
inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "authority_name")}) | ||
@ManyToMany | ||
private Set<Authority> authorities; | ||
} |
48 changes: 48 additions & 0 deletions
48
src/main/java/com/example/moreveiw/domain/member/model/dao/MemberMapper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package com.example.moreveiw.domain.member.model.dao; | ||
|
||
import com.example.moreveiw.domain.member.model.dto.request.MemberRequest; | ||
import com.example.moreveiw.domain.member.model.dto.response.MemberListResponse; | ||
import com.example.moreveiw.domain.member.model.dto.response.MemberResponse; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.security.crypto.password.PasswordEncoder; | ||
import org.springframework.stereotype.Component; | ||
|
||
import java.util.Collections; | ||
import java.util.List; | ||
import java.util.stream.Collectors; | ||
|
||
@Component | ||
@RequiredArgsConstructor | ||
public class MemberMapper { | ||
|
||
private final PasswordEncoder passwordEncoder; | ||
|
||
public Member toEntity(MemberRequest request) { | ||
|
||
Member member = Member.builder() | ||
.name(request.getName()) | ||
.email(request.getEmail()) | ||
.password(passwordEncoder.encode(request.getPassword())) | ||
.build(); | ||
|
||
return member; | ||
} | ||
|
||
public MemberResponse toResponse(Member member) { | ||
if (member == null) return null; | ||
|
||
return MemberResponse.builder() | ||
.email(member.getEmail()) | ||
.role(member.getRole()) | ||
.name(member.getName()) | ||
.build(); | ||
} | ||
|
||
public MemberListResponse toListResponse(List<Member> memberList) { | ||
List<MemberResponse> memberResponseList = | ||
memberList.stream().map(this::toResponse).collect(Collectors.toList()); | ||
return MemberListResponse.builder() | ||
.memberList(memberResponseList) | ||
.build(); | ||
} | ||
} |
5 changes: 5 additions & 0 deletions
5
src/main/java/com/example/moreveiw/domain/member/model/dao/Role.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package com.example.moreveiw.domain.member.model.dao; | ||
|
||
public enum Role { | ||
ADMIN, USER | ||
} |
Oops, something went wrong.