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.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
public class RealworldApplication {

View File

@@ -1,53 +1,19 @@
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.service.JwtService;
import com.io.realworld.domain.aggregate.user.service.UserServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import javax.servlet.http.HttpServletRequest;
@RestController
@Slf4j
@RequestMapping("/api/users")
@RequestMapping("/api/user")
public class UserController {
private final UserServiceImpl userService;
private final JwtService jwtService;
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();
@GetMapping
public User currentUser(HttpServletRequest request){
System.out.println("request = " + request);
return null;
}
}

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.domain.aggregate.user.entity.User;

View File

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

View File

@@ -1,9 +1,12 @@
package com.io.realworld.security.jwt;
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 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.core.authority.AuthorityUtils;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -18,6 +21,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Optional;
@Slf4j
@Component
@AllArgsConstructor
public class JwtAuthenticationFilter extends OncePerRequestFilter {
@@ -30,6 +34,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
log.info("hello jwt filter");
Optional<String> token = getToken(request.getHeader(HEADER));
String email = 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.exception.CustomException;
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.service.JwtService;
import com.io.realworld.domain.service.JwtService;
import com.io.realworld.domain.aggregate.user.service.UserServiceImpl;
import org.hamcrest.Matchers;
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;
@WebMvcTest(controllers = UserController.class)
class UserControllerTest {
@WebMvcTest(controllers = UsersController.class)
class UsersControllerTest {
@Autowired
MockMvc mockMvc;
@@ -42,7 +42,7 @@ class UserControllerTest {
ObjectMapper objectMapper;
@InjectMocks
private UserController userController;
private UsersController usersController;
@MockBean
private UserServiceImpl userService;