안녕하세요. 오늘은 이전 포스팅에서 다뤘던 Java 설정파일에 이어서 인증로직을 구현해보겠습니다. 흐름을 파악하시기 위해서 이전 포스팅 내용을 확인 후 진행하시는 편을 추천드립니다.! https://sas-study.tistory.com/357 이전 포스팅에서는 별다른 인증로직 없이 /permit-all 과 /auth 매핑 주소로 인증을 나눠봤습니다. 단순히 permit-all은 인증 여부와 관련없이 통과되는 url이고, /auth는 인증여부에 따라 성공하거나 실패하는 경우로 나눠봤어요. 그런데 /auth는 인증로직이 별도로 구현되지 못했기 때문에 항상 403(Forbidden)을 내려줬을 것입니다. 오늘 해볼 작업은 /auth url 에서 200(성공) 코드를 얻어보는 작업을 해보겠습니다. 그 중에서 ..
이전 포스팅이 있으니 먼저 진행해보시기를 추천드립니다.!! https://sas-study.tistory.com/356 오늘은 지난 컨트롤러 작성한 부분에서 Spring Security 를 적용해보겠습니다. 프로젝트 구조는 다음과 같습니다. configuration 패키지에 SecurityConfig 자바파일을 추가해주었습니다. 소스 살펴보기 TestController.java @RequiredArgsConstructor @RequestMapping("/api/v1/test") @RestController public class TestController { private final TestService testService; @GetMapping("/permit-all") public Object ge..
안녕하세요. 오늘은 스프링 프로젝트들 중에서 단연 최고 난이도로 알려져 있는 Spring Security 설정해보기 시리즈 중 첫번째 단계인 스펙정의 및 사전작업에 대해서 설명해드리고자 합니다. 제목부터 확인해볼까요? Restful API 구현을 위한 Spring Security 설정해보기 1. Session Stateless Restful API 라는 것은 여러가지 의미가 담겨있습니다. API URL에 대한 내용이 있을 수 있고, Session Stateless 라는 개념이 있을 수도 있고, Spring Hateoas와 관련된 link 기능을 제공하는 것과 관련이 있습니다. 이러한 여러가지 중에서 Spring Security에서 담당해야할 부분은 인증과 권한, 이 두 개념과 관련이 있는 Session ..
스프링 Bean Validation 이란?? 스프링에서는 JavaBean(getter와 setter를 가지고 있는 자바객체, 흔히 VO, DTO라고 부르는 것들)의 유효성 작업을 진행하기 위해 javax.validation 패키지 내에 있는 여러가지 유효성 관련 클래스들을 활용할 수 있습니다. * 참고로 스프링 부트 2.3 버전 이후부터는 Spring Web 유효성에서 Validation 의존성이 따로 분리되어 별도로 Validation 의존성을 추가해야 javax.validation 패키지를 활용하여 여러가지 유효성 검사를 어노테이션을 통해 활용할 수 있습니다. 대표적으로 오늘 살펴볼 ConstraintValidator 인터페이스를 구현하여 아래와 같이 Email의 유효성 검사를 할 수 있는 Email..
안녕하세요. 오늘은 그동안 사용해왔던 여러가지 Dependency Injection 방법들에 대해서 소개해보고자 합니다. 일단 Dependency Injection이 무엇인지부터 이야기가 선행되어야 할텐데요. 다들 아시겠지만 스프링에서의 가장 기본적인 개념이 되겠고, 특정 계층(컨트롤러, 서비스 등)에 선언된 local 변수들의 인스턴스를 스프링 컨테이너 내에서 Bean이라는 객체로 관리되게 됩니다.(관리하여 주입해줄 객체) 한글로는 의존객체라고하며 A라는 클래스에 B라는 객체가 로컬변수로 선언되어 B의 메소드가 사용되고 있을 때, B가 없으면 A 클래스의 인스턴스가 생성될 수 없기 때문에 A는 B에 의존한다라고 합니다. 따라서 스프링은 프레임워크이기 때문에 싱글톤으로 이러한 A, B라는 Bean 객체를..
@ConfigurationProperties @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ConfigurationProperties { @AliasFor("prefix") String value() default ""; @AliasFor("value") String prefix() default ""; boolean ignoreInvalidFields() default false; boolean ignoreUnknownFields() default true; } 기본적으로 소스는 다음과 같습니다. 안의 주석문을 뜯어보면 다음과 같습니다. 맨 위엣줄..
안녕하세요. 오늘은 서버사이드 렌더링 환경에서 사용되는 템플릿 엔진중 thymeleaf라는 템플릿 엔진을 예제로 스프링부트로 서버사이드 렌더링했을 때 서버를 직접 재시작하지 않고도 화면을 갱신하는 방법을 공유하고자 합니다. 먼저 필요한 컨트롤러를 작성합니다. 컨트롤러 @Controller public class HelloController { @GetMapping("/hello") public String hello(Model model) { model.addAttribute("data", "hello"); return "hello"; } } locahost:8080 를 기본으로 /hello로 접근했을 때, templates/hello.html 파일을 찾아내서 렌더링하게 될 것입니다. hello.html..
Vue CLI로 프로젝트를 생성하고 나서 Vue 개발을 진행하다 보면 다음과 같은 화면을 많이 마주할 것이다. 뭐 대충 이런 에러메시지를 화면 전체에 띄워서 "당장 이 에러를 수정하지 않으면 너의 어플리케이션은 너또한 건드릴 수 없을 것이야" 라는 직접적인 표시로 보인다.. 하지만 내가 이 에러는 마주하는 이유는 바로.... 선언된 var a 라는 변수가 10을 할당받았는데... 이걸 사용하지 않아서 발생하는 에러이다. 단지 warn 정도일 뿐 에러는 아니라는 것이다. 그런데도 ESLint라는 녀석은 이걸 아주 강력하게 잡고 개발하는데 생산성을 엄청나게!!! 저하시키곤 한다. 이걸 수정하고 나면 다시 화면을 왔다 갔다하는 시간이 너무 아깝다!!! ESLint 에러 해결 현재 이 프로젝트는 vue crea..