fix, jwt filter..

This commit is contained in:
minseokkang
2022-09-15 15:06:11 +09:00
parent dae5a54533
commit 8426e2db22
7 changed files with 79 additions and 54 deletions

View File

@@ -2,6 +2,7 @@ package com.io.realworld;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication @SpringBootApplication
public class RealworldApplication { public class RealworldApplication {

View File

@@ -1,53 +1,19 @@
package com.io.realworld.domain.aggregate.user.controller; package com.io.realworld.domain.aggregate.user.controller;
import com.io.realworld.domain.aggregate.user.dto.UserSigninRequest;
import com.io.realworld.domain.aggregate.user.dto.UserSignupRequest;
import com.io.realworld.domain.aggregate.user.dto.UserResponse;
import com.io.realworld.domain.aggregate.user.entity.User; import com.io.realworld.domain.aggregate.user.entity.User;
import com.io.realworld.domain.aggregate.service.JwtService; import org.springframework.web.bind.annotation.GetMapping;
import com.io.realworld.domain.aggregate.user.service.UserServiceImpl; import org.springframework.web.bind.annotation.RequestMapping;
import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid; import javax.servlet.http.HttpServletRequest;
@RestController @RestController
@Slf4j @RequestMapping("/api/user")
@RequestMapping("/api/users")
public class UserController { public class UserController {
@GetMapping
private final UserServiceImpl userService; public User currentUser(HttpServletRequest request){
System.out.println("request = " + request);
private final JwtService jwtService; return null;
public UserController(UserServiceImpl userService, JwtService jwtService) {
this.userService = userService;
this.jwtService = jwtService;
}
@PostMapping(value = "")
public UserResponse signup(@Valid @RequestBody UserSignupRequest userSignupRequest) {
User user = userService.signup(userSignupRequest);
return UserResponse.builder().username(user.getUsername())
.email(user.getEmail())
.bio(user.getBio())
.image(user.getImage())
.token(jwtService.createToken(user.getEmail()))
.build();
}
@PostMapping(value = "/login")
public UserResponse signin(@Valid @RequestBody UserSigninRequest userSigninRequest){
User user = userService.signin(userSigninRequest);
return UserResponse.builder().username(user.getUsername())
.email(user.getEmail())
.bio(user.getBio())
.image(user.getImage())
.token(jwtService.createToken(user.getEmail()))
.build();
} }
} }

View File

@@ -0,0 +1,52 @@
package com.io.realworld.domain.aggregate.user.controller;
import com.io.realworld.domain.aggregate.user.dto.UserSigninRequest;
import com.io.realworld.domain.aggregate.user.dto.UserSignupRequest;
import com.io.realworld.domain.aggregate.user.dto.UserResponse;
import com.io.realworld.domain.aggregate.user.entity.User;
import com.io.realworld.domain.service.JwtService;
import com.io.realworld.domain.aggregate.user.service.UserServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController
@RequestMapping("/api/users")
public class UsersController {
private final UserServiceImpl userService;
private final JwtService jwtService;
public UsersController(UserServiceImpl userService, JwtService jwtService) {
this.userService = userService;
this.jwtService = jwtService;
}
@PostMapping(value = "")
public UserResponse signup(@Valid @RequestBody UserSignupRequest userSignupRequest) {
User user = userService.signup(userSignupRequest);
return UserResponse.builder().username(user.getUsername())
.email(user.getEmail())
.bio(user.getBio())
.image(user.getImage())
.token(jwtService.createToken(user.getEmail()))
.build();
}
@PostMapping(value = "/login")
public UserResponse signin(@Valid @RequestBody UserSigninRequest userSigninRequest){
User user = userService.signin(userSigninRequest);
return UserResponse.builder().username(user.getUsername())
.email(user.getEmail())
.bio(user.getBio())
.image(user.getImage())
.token(jwtService.createToken(user.getEmail()))
.build();
}
}

View File

@@ -1,4 +1,4 @@
package com.io.realworld.domain.aggregate.service; package com.io.realworld.domain.service;
import com.io.realworld.security.jwt.JwtConfig; import com.io.realworld.security.jwt.JwtConfig;
import com.io.realworld.domain.aggregate.user.entity.User; import com.io.realworld.domain.aggregate.user.entity.User;

View File

@@ -1,7 +1,7 @@
package com.io.realworld.security; package com.io.realworld.security;
import com.io.realworld.security.jwt.JwtAuthenticationFilter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -25,9 +25,10 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic
@EnableWebSecurity @EnableWebSecurity
public class WebConfig { public class WebConfig {
private final JwtAuthenticationFilter jwtAuthenticationFilter;
@Bean @Bean
PasswordEncoder passwordEncoder() { public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(); return new BCryptPasswordEncoder();
} }
@@ -36,7 +37,7 @@ public class WebConfig {
http.csrf() http.csrf()
.disable() .disable()
.authorizeRequests() .authorizeRequests()
.antMatchers("/api/users/**", "/h2-console/**", "/**").permitAll() .antMatchers("/api/users/**", "/h2-console/**").permitAll()
.anyRequest().authenticated() .anyRequest().authenticated()
.and().headers().frameOptions().sameOrigin() .and().headers().frameOptions().sameOrigin()
.and() .and()
@@ -44,7 +45,7 @@ public class WebConfig {
.disable() .disable()
.exceptionHandling() .exceptionHandling()
.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)); .authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED));
http.addFilter(jwtAuthenticationFilter);
return http.build(); return http.build();
} }

View File

@@ -1,9 +1,12 @@
package com.io.realworld.security.jwt; package com.io.realworld.security.jwt;
import com.io.realworld.domain.aggregate.user.entity.User; import com.io.realworld.domain.aggregate.user.entity.User;
import com.io.realworld.domain.aggregate.service.JwtService; import com.io.realworld.domain.service.JwtService;
import com.io.realworld.domain.aggregate.user.service.UserServiceImpl; import com.io.realworld.domain.aggregate.user.service.UserServiceImpl;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
@@ -18,6 +21,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.Optional; import java.util.Optional;
@Slf4j
@Component @Component
@AllArgsConstructor @AllArgsConstructor
public class JwtAuthenticationFilter extends OncePerRequestFilter { public class JwtAuthenticationFilter extends OncePerRequestFilter {
@@ -30,6 +34,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
@Override @Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
log.info("hello jwt filter");
Optional<String> token = getToken(request.getHeader(HEADER)); Optional<String> token = getToken(request.getHeader(HEADER));
String email = null; String email = null;
String jwt = null; String jwt = null;

View File

@@ -4,9 +4,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.io.realworld.domain.aggregate.user.dto.UserSignupRequest; import com.io.realworld.domain.aggregate.user.dto.UserSignupRequest;
import com.io.realworld.exception.CustomException; import com.io.realworld.exception.CustomException;
import com.io.realworld.exception.Error; import com.io.realworld.exception.Error;
import com.io.realworld.domain.aggregate.user.controller.UserController; import com.io.realworld.domain.aggregate.user.controller.UsersController;
import com.io.realworld.domain.aggregate.user.entity.User; import com.io.realworld.domain.aggregate.user.entity.User;
import com.io.realworld.domain.aggregate.service.JwtService; import com.io.realworld.domain.service.JwtService;
import com.io.realworld.domain.aggregate.user.service.UserServiceImpl; import com.io.realworld.domain.aggregate.user.service.UserServiceImpl;
import org.hamcrest.Matchers; import org.hamcrest.Matchers;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
@@ -33,8 +33,8 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
@WebMvcTest(controllers = UserController.class) @WebMvcTest(controllers = UsersController.class)
class UserControllerTest { class UsersControllerTest {
@Autowired @Autowired
MockMvc mockMvc; MockMvc mockMvc;
@@ -42,7 +42,7 @@ class UserControllerTest {
ObjectMapper objectMapper; ObjectMapper objectMapper;
@InjectMocks @InjectMocks
private UserController userController; private UsersController usersController;
@MockBean @MockBean
private UserServiceImpl userService; private UserServiceImpl userService;