Skip to content

Commit 2473cbf

Browse files
authored
Merge pull request #40 from 28delivery/enhancement/35-enhancement-login-jwtathentificationfilter-개선
🩹 fix: login jwtathentificationfilter 개선
2 parents 56d33a6 + a18e82d commit 2473cbf

8 files changed

Lines changed: 22 additions & 51 deletions

File tree

src/main/java/com/sparta/spring_deep/_delivery/config/WebSecurityConfig.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package com.sparta.spring_deep._delivery.config;
22

3-
import com.sparta.spring_deep._delivery.config.security.JwtAuthenticationFilter;
4-
import com.sparta.spring_deep._delivery.config.security.JwtAuthorizationFilter;
3+
import com.sparta.spring_deep._delivery.domain.user.jwt.JwtAuthenticationFilter;
4+
import com.sparta.spring_deep._delivery.domain.user.jwt.JwtAuthorizationFilter;
55
import com.sparta.spring_deep._delivery.domain.user.details.UserDetailsServiceImpl;
6-
import com.sparta.spring_deep._delivery.util.JwtUtil;
6+
import com.sparta.spring_deep._delivery.domain.user.jwt.JwtUtil;
7+
import com.sparta.spring_deep._delivery.domain.user.repository.UserRepository;
78
import lombok.RequiredArgsConstructor;
89
import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
910
import org.springframework.context.annotation.Bean;
@@ -15,6 +16,7 @@
1516
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
1617
import org.springframework.security.config.http.SessionCreationPolicy;
1718
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
19+
import org.springframework.security.crypto.password.PasswordEncoder;
1820
import org.springframework.security.web.SecurityFilterChain;
1921
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
2022

@@ -24,6 +26,7 @@
2426
public class WebSecurityConfig {
2527

2628
private final JwtUtil jwtUtil;
29+
private final UserRepository userRepository;
2730
private final UserDetailsServiceImpl userDetailsService;
2831
private final AuthenticationConfiguration authenticationConfiguration;
2932

src/main/java/com/sparta/spring_deep/_delivery/domain/user/controller/UserController.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import com.sparta.spring_deep._delivery.domain.user.dto.UserDto;
88
import com.sparta.spring_deep._delivery.domain.user.entity.User;
99
import com.sparta.spring_deep._delivery.domain.user.service.UserService;
10-
import com.sparta.spring_deep._delivery.util.JwtUtil;
10+
import com.sparta.spring_deep._delivery.domain.user.jwt.JwtUtil;
1111
import jakarta.validation.Valid;
1212
import lombok.RequiredArgsConstructor;
1313
import lombok.extern.slf4j.Slf4j;
@@ -53,21 +53,6 @@ public ResponseEntity<?> signup(@RequestBody UserDto userDto, BindingResult bind
5353
return new ResponseEntity<>(newUser, HttpStatus.CREATED);
5454
}
5555

56-
@PostMapping("/login")
57-
public ResponseEntity<?> login(@Valid @RequestBody LoginRequestDto loginRequestDto,
58-
BindingResult bindingResult) {
59-
if (bindingResult.hasErrors()) {
60-
String errorMsg = bindingResult.getFieldError("username") != null ?
61-
bindingResult.getFieldError("username").getDefaultMessage() : "Invalid input";
62-
logger.error("Login validation failed: {}", errorMsg);
63-
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorMsg);
64-
}
65-
66-
LoginResponseDto loginResponseDto = userService.login(loginRequestDto);
67-
logger.info("User logged in successfully: {}", loginResponseDto.getUsername());
68-
return ResponseEntity.ok(loginResponseDto);
69-
}
70-
7156
@PostMapping("/logout")
7257
public ResponseEntity<?> logout(@RequestHeader(value = "Authorization") String token) {
7358
// 클라이언트쪽에서 JWT 토큰 무효화해야 함!

src/main/java/com/sparta/spring_deep/_delivery/config/security/JwtAuthenticationFilter.java renamed to src/main/java/com/sparta/spring_deep/_delivery/domain/user/jwt/JwtAuthenticationFilter.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
package com.sparta.spring_deep._delivery.config.security;
1+
package com.sparta.spring_deep._delivery.domain.user.jwt;
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import com.sparta.spring_deep._delivery.domain.user.details.UserDetailsImpl;
55
import com.sparta.spring_deep._delivery.domain.user.dto.LoginRequestDto;
66
import com.sparta.spring_deep._delivery.domain.user.entity.UserRole;
7-
import com.sparta.spring_deep._delivery.util.JwtUtil;
87
import jakarta.servlet.FilterChain;
98
import jakarta.servlet.http.HttpServletRequest;
109
import jakarta.servlet.http.HttpServletResponse;
@@ -35,6 +34,7 @@ public Authentication attemptAuthentication(HttpServletRequest request,
3534
LoginRequestDto requestDto = new ObjectMapper().readValue(request.getInputStream(),
3635
LoginRequestDto.class);
3736

37+
3838
return getAuthenticationManager().authenticate(
3939
new UsernamePasswordAuthenticationToken(
4040
requestDto.getUsername(),
@@ -50,15 +50,16 @@ public Authentication attemptAuthentication(HttpServletRequest request,
5050

5151
@Override
5252
protected void successfulAuthentication(HttpServletRequest request,
53-
HttpServletResponse response, FilterChain chain, Authentication authResult) {
53+
HttpServletResponse response, FilterChain chain, Authentication authResult)
54+
throws IOException {
5455

55-
String username = ((UserDetailsImpl) authResult.getPrincipal()).getUsername();
56-
UserRole role = ((UserDetailsImpl) authResult.getPrincipal()).getUser().getRole();
56+
UserDetailsImpl userDetails = (UserDetailsImpl) authResult.getPrincipal();
57+
String username = userDetails.getUsername();
58+
UserRole role = userDetails.getUser().getRole();
5759

5860
String token = jwtUtil.createJwt(username, role);
59-
System.out.println(token);
60-
response.addHeader(JwtUtil.AUTHORIZATION_HEADER, token);
6161

62+
response.addHeader(JwtUtil.AUTHORIZATION_HEADER, token);
6263
}
6364

6465
@Override

src/main/java/com/sparta/spring_deep/_delivery/config/security/JwtAuthorizationFilter.java renamed to src/main/java/com/sparta/spring_deep/_delivery/domain/user/jwt/JwtAuthorizationFilter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
package com.sparta.spring_deep._delivery.config.security;
1+
package com.sparta.spring_deep._delivery.domain.user.jwt;
22

33
import com.sparta.spring_deep._delivery.domain.user.details.UserDetailsServiceImpl;
4-
import com.sparta.spring_deep._delivery.util.JwtUtil;
54
import io.jsonwebtoken.Claims;
65
import jakarta.servlet.FilterChain;
76
import jakarta.servlet.ServletException;

src/main/java/com/sparta/spring_deep/_delivery/util/JwtBlacklistRepository.java renamed to src/main/java/com/sparta/spring_deep/_delivery/domain/user/jwt/JwtBlacklistRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.sparta.spring_deep._delivery.util;
1+
package com.sparta.spring_deep._delivery.domain.user.jwt;
22

33
import java.util.concurrent.ConcurrentHashMap;
44
import org.springframework.stereotype.Component;

src/main/java/com/sparta/spring_deep/_delivery/util/JwtUtil.java renamed to src/main/java/com/sparta/spring_deep/_delivery/domain/user/jwt/JwtUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.sparta.spring_deep._delivery.util;
1+
package com.sparta.spring_deep._delivery.domain.user.jwt;
22

33
import com.sparta.spring_deep._delivery.domain.user.entity.UserRole;
44
import io.jsonwebtoken.Claims;

src/main/java/com/sparta/spring_deep/_delivery/domain/user/repository/UserRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package com.sparta.spring_deep._delivery.domain.user.repository;
22

33
import com.sparta.spring_deep._delivery.domain.user.entity.User;
4+
import java.util.List;
45
import java.util.Optional;
56
import org.springframework.data.jpa.repository.JpaRepository;
67
import org.springframework.stereotype.Repository;
78

89
@Repository
910
public interface UserRepository extends JpaRepository<User, String>, UserRepositoryCustom {
1011

12+
Optional<User> findByUsername(String username);
13+
1114
Optional<User> findByUsernameAndIsDeletedFalse(String username);
1215

1316
Optional<User> findByEmail(String email);

src/main/java/com/sparta/spring_deep/_delivery/domain/user/service/UserService.java

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import com.sparta.spring_deep._delivery.domain.user.entity.UserRole;
1111
import com.sparta.spring_deep._delivery.domain.user.repository.UserRepository;
1212
import com.sparta.spring_deep._delivery.exception.DuplicateResourceException;
13-
import com.sparta.spring_deep._delivery.util.JwtUtil;
13+
import com.sparta.spring_deep._delivery.domain.user.jwt.JwtUtil;
1414
import java.time.LocalDateTime;
1515
import lombok.RequiredArgsConstructor;
1616
import lombok.extern.slf4j.Slf4j;
@@ -69,26 +69,6 @@ public User registerUser(UserDto userDto) {
6969
return user;
7070
}
7171

72-
public LoginResponseDto login(LoginRequestDto loginRequestDto) {
73-
Authentication authentication = authenticationManager.authenticate(
74-
new UsernamePasswordAuthenticationToken(loginRequestDto.getUsername(),
75-
loginRequestDto.getPassword())
76-
);
77-
78-
SecurityContextHolder.getContext().setAuthentication(authentication);
79-
UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal();
80-
81-
User user = userDetails.getUser();
82-
String username = userDetails.getUsername();
83-
String email = user.getEmail();
84-
IsPublic isPublic = user.getIsPublic();
85-
UserRole userRole = user.getRole();
86-
87-
String jwt = jwtUtil.createJwt(username, userRole);
88-
89-
return new LoginResponseDto(jwt, username, email, userRole, isPublic);
90-
}
91-
9272
public User updateUser(String userName, UserDto userDto) {
9373
User user = userRepository.findByUsernameAndIsDeletedFalse(userName)
9474
.orElseThrow(() -> new RuntimeException("User not found!"));

0 commit comments

Comments
 (0)