fix, jwt filter..
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
Reference in New Issue
Block a user