반응형 전체 글297 로그인 유저 어노테이션 기반으로 정보 가져오기(@AuthenticationPrincipal 커스텀) 로그인 유저 어노테이션 기반으로 정보 가져오기 이전에 @AuthenticationPrincipal 을 커스텀해서 어노테이션으로 정보를 가져오는 방법에 대해 알아보겠습니다. 로그인 유저 어노테이션 프로젝트의 성능 개선을 어노테이션을 이용해서 해결하는 방법이다. 기존 @AuthencationPrincipal 의 Principal 객체를 사용할 경우 NullException 이 발생하는 경우가 있다. Controller 단에서 Null 체크가 아닌 커스텀으로 ArgumentResolver를 만든 후에 @LoginUser라는 어노테이션을 만들어서 개선하는 방법이다. (1) @LoginUser 어노테이션 생성 @Target(ElementType.PARAMETER) @Retention(RetentionPolicy... Spring/스프링 이론 2023. 12. 24. [Spring Security] @AuthenticationPrincipal 로그인 정보 받아오기 @AuthenticationPrincipal 로그인 정보 받아오기 @AuthenticationPrincipal 을 이용해서 로그인 정보를 받아오는 방법에 대해 알아보겠습니다. 기존 방식 컨트롤러 세션에 저장되어 있는 member의 아이디를 이용해서 조회하여 사용 @GetMapping("/member") public ResponseEntity findMemberInfo(@RequestParam Long id) { return ResponseEntity.ok(memberService.findMemberInfo(id)); } 해당 방식으로 사용하면서의 불합리 1. 로그인 사용자의 정보가 필요할 때마다 매번 서버에 요청해서 DB에 접근해서 데이터를 가져온다. 2. 본인이 아닌데 타인의 정보를 확인할 수 있다. .. Spring/스프링 이론 2023. 12. 23. [Mockito] @WebMvcTest 401/403 에러 처리하기 @WebMvcTest 401/403 에러 처리하기 API 개발 후 테스트를 하는 도중에 발생한 에러를 처리하는 방법에 대해 알아보겠습니다. 테스트 코드 @WebMvcTest(AuthController.class) class AuthControllerTest { @MockBean private AuthService authService; @MockBean private MailService mailService; @MockBean private TokenProvider tokenProvider; @Autowired private MockMvc mockMvc; @Autowired private ObjectMapper objectMapper; @Test @DisplayName("회원가입 성공") void su.. TEST/JUnit 2023. 12. 20. WebSecurityConfigurerAdapter deprecated 대체하는 방법 WebSecurityConfigurerAdapter 대체 Spring Security 6.0 버전을 기준으로 WebSecurityConfigurerAdapter를 import를 하지 못한다. WebSecurityConfigurerAdapter를 대체하는 방법에 대해 알아보겠습니다. 커스텀 컴포넌트 설정 방법 configure(httpSecurity 설정) 기존 방식의 코드 @Configuration @EnableWebSecurity public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.. Spring/스프링 이론 2023. 12. 8. 스프링 시큐리티(Spring Security) 구현(of. 회원가입, 로그인) 회원가입과 로그인 구현 스프링 시큐리티 설정 후에 회원가입과 로그인 구현하는 것에 대해 알아보겠습니다. 회원가입 구현 SignService 인터페이스 구현 public interface SignService { /** * 회원 가입 */ SignUpResultDto signUp(String id, String password, String name, String role); /** * 로그인 */ SignUpResultDto signIn(String id, String password) throws RuntimeException; } SignServiceImpl 클래스 (회원 가입) @Override public SignUpResultDto signUp(String id, String password, .. Book/스프링부트 핵심가이드 2023. 12. 8. 스프링 시큐리티(Spring Security) 구현(of. SecurityConfiguration) 스프링 시큐리티 구현 스프링 시큐리티와 관련된 설정 방법에 대해 알아보겠습니다. SecurityConfiguration 구현 SecurityConfiguration 클래스 [HttpSecurity] @Configuration @RequiredArgsConstructor public class SecurityConfiguration extends WebSecurityConfigurerAdapter { private final JwtTokenProvider jwtTokenProvider; @Override protected void configure(HttpSecurity httpSecurity) throws Exception { httpSecurity.httpBasic().disable() .csrf()... Book/스프링부트 핵심가이드 2023. 12. 6. 스프링 시큐리티(Spring Security) 구현(of. Jwt Token) 스프링 시큐리티 구현 토큰값(JWT) 을 활용하여 스프링 시큐리티를 적용하기 위한 컴포넌트에 대해 알아보겠습니다. JWT 의존성 추가(Maven -> pom.xml) org.springframework.boot spring-boot-starter-security io.jsonwebtoken jjwt 0.9.1 스프링 시큐리티는 기본적으로 UsernamePasswordAuthenticationFilter를 통해 인증을 수행하도록 구성되어있다. 해당 필터는 인증이 실패하면 로그인 폼이 포함된 화면을 전달한다. UserDetails와 UserDetailsService 구현 User Entity 생성 @Getter @Setter @Entity @NoArgsConstructor @AllArgsConstructor.. Book/스프링부트 핵심가이드 2023. 12. 6. 스프링 시큐리티(Spring Security)와 JWT 서비스 인증과 인가 보안과 관련된 용어와 개념 및 스프링에 보안을 적용할 때 사용하는 스프링 시큐리티(spring security)를 알아보겠습니다. 보안 용어 인증(authentication) 사용자가 누구인지 확인하는 단계를 의미한다. 인증의 대표적인 예시(ex. 로그인) 로그인은 데이터베이스에 등록된 아이디와 패스워드를 사용자가 입력한 아이디 및 비밀번호를 비교해서 일치 여부를 확인하는 과정이다. 로그인에 성공하면 애플리케이션 서버는 응답으로 사용자에게 토큰(token)을 전달한다. 로그인에 실패하면 사용자는 토큰을 전달받지 못해서 원하는 리소스에 접근할 수 없게 된다. 인가(authorization) 인증을 통해 검증된 사용자가 애플리케이션 내부의 리소스에 접근할 때 사용자가 해당 리소스에 접근할.. Book/스프링부트 핵심가이드 2023. 12. 5. 스프링부트를 이용한 서버 간의 통신(of. WebClient) 서버 간의 통신 다른 서버가 API를 호출해서 사용할 수 있게 구성되어 웹 요청을 보내고 응답 받을 수 있게 도와주는 "WebClient"에 대해 알아보겠습니다. WebClient 일반적으로 실제 운영환경에 적용되는 애플리케이션은 정식 버전으로 출시된 스프링 부트의 버전보다 낮은 경우가 많다. 그렇기 때문에 "RestTemplate" 을 많이 사용하고 있다. 하지만 최신 버전에서는 "RestTemplate" 이 지원 중단되어 WebClient를 사용할 것을 권고하고 있다. Spring WebFlux HTTP 요청을 수행하는 클라이언트로 WebClient를 제공한다. WebClient는 리액터(Reactor) 기반으로 동작하는 API 입니다. 리액터 기반으로 스레드와 동시성 문제를 벗어나 비동기 형식으로 .. Book/스프링부트 핵심가이드 2023. 12. 2. 스프링부트를 이용한 서버 간의 통신(of. RestTemplate) 서버 간의 통신 다른 서버가 API를 호출해서 사용할 수 있게 구성되어 웹 요청을 보내고 응답 받을 수 있게 도와주는 "RestTemplate"에 대해 알아보겠습니다. RestTemplate 스프링에서 HTTP 통신 기능을 손쉽게 사용하도록 설계된 템플릿이다. HTTP 서버와의 통신을 단순화한 해당 템플릿을 사용하면 RESTful 원칙을 따르는 서비스를 편리하게 만들 수 있다. 기본적으로 동기 방식으로 처리되며, 비동식 방식으로 사용하고 싶은 경우 AsyncRestTemplate을 사용하면 된다. 다만 현업에서는 많이 쓰이나 지원 중단된 상태라서 WebClient 방식도 함께 알아둘 것을 권장한다. RestTemplate의 특징 HTTP 프로토콜의 메서드에 맞는 여러 메서드를 제공한다 RESTful 형식.. Book/스프링부트 핵심가이드 2023. 12. 1. 스프링부트 액추에이터 기능 엑추에이터의 기능에는 무엇이 있을까요? '액추에이터' 설정으로 볼 수 있는 기능에 대해 알아보겠습니다. 애플리케이션 기본 정보(/info) 액추에이터의 /info 엔드포인트를 활요하면 가동중인 애플리케이션의 정보를 확인할 수 있다. 제공하는 정보의 범위는 application.properties 파일에 'info.' 로 시작하는 속성값들을 정의하는 것이 가장 쉽다. 액추에이터 /info 설정 [application.properties] info.organization.name=test info.contact.email=test@gmail.com info.contact.phoneNumber=010-1234-5678 액추에이터 /info 출력 결과 { "organization": { "name":"test".. Book/스프링부트 핵심가이드 2023. 11. 30. 스프링부트 액추에이터의 기본 개념 엑추에이터란? 애플리케이션 운영 단계가 되면 정상적으로 동작하는지 모니터링하는 환경을 구축하는 것이 중요한데 해당 기능을 하는 '액추에이터' 에 대해 알아보겠습니다. 스프링부트 액추에이터 HTTP 엔드포인트나 JMX를 활용하여 애플리케이션을 모니터링하고 관리할 수 있는 기능을 제공한다. JMX(Java Management Extensions) 실행 중인 애플리케이션의 상태를 모니터링하고 설정을 변경할 수 있게 해주는 API JMX를 통해 리소스 관리를 하려면 MBeans(Managed Beans)를 생성해야한다. 엔드포인트 액추에이터의 엔드포인트는 애플리케이션의 모니터링을 사용하는 경로이다. 스프링부트에는 여러 내장 엔드포인트가 포함되어 있고, 커스텀 엔드포인트도 추가할 수 있다. 액추에이터를 추가하면 .. Book/스프링부트 핵심가이드 2023. 11. 28. 이전 1 ··· 3 4 5 6 7 8 9 ··· 25 다음