배포된 서비스에서 특정 API가 리다이렉트되고 난 뒤 401 에러가 발생하면서 문제를 일으키게 되었다. 해당 문제에 대해 원인은 발견하고 해결 했지만 무슨 이유로 생기는지 어떻게 해결해야되는지 정리하면 좋을 것 같아서 정리하게 되었다. 문제가 되었던 컨트롤러 @GetMapping("") public void hello(HttpServletRequest request, HttpServletResponse response) throws IOException { String nickname = "riospring"; logging(request); response.sendRedirect("/api/v1/user/" + nickname); } 내가 원했던 API 통신 path variable을 입력하지 않았을 ..
JAVA/Spring Boot
JWT Authentication Flow HTTP는 connectionless, stateless한 성질을 가지고 있는 프로토콜 입니다. 그렇기에 유저 인증이 필요한 경우 인증이 필요할 때 마다 로그인을 할 수 없으므로 토큰이나 세션을 통해 유저 인증 상태를 관리하게 되는데 그중 가장 널리 사용되는 JWT 토큰 전략을 스프링 시큐리티 활용하여 사용방법과 동작과정을 정리한 글입니다. 1. 유저 정보를 자바에서 Validation을 활용하여 유저 정보를 체크하고 H2 데이터 베이스에 저장을 합니다. 2. 스프링 시큐리티를 통해 유저 로그인 정보를 인증하고 토큰을 발급 받습니다. 3. 스프링 시큐리티를 통해 전달 받은 토큰을 통해 인가 과정을 거친 후 서비스 로직을 동작하도록 합니다. 스프링 시큐리티가 있는..
npm을 통해 express를 다운로드하고 express 프로젝트를 생성하면 아래와 같은 구조로 생성하게 되는데 프로젝트를 진행하기 전에 각각 무슨 역활을 하는지 알아 보고자한다. 프로젝트 구조 ├── app.js ├── bin │ └── www ├── package.json ├── public │ ├── images │ ├── javascripts │ └── stylesheets │ └── style.css ├── routes │ ├── index.js │ └── users.js └── views www express의 핵심파일로 아래와 같이 구성되어 있다. var app = require('../app'); var debug = require('debug')('learn-express:server')..
스프링 부트는 스프링 프레임워크를 기반으로 만들어진 백엔드 프레임 워크이다. 스프링 부트의 동작원리를 이해하기전에 스프링 부트의 다양한 계층, 클래스를 알아보자 레이어 Presentation Layer (프레젠테이션 계층)프레젠테이션 계층은 HTTP 요청을 처리하고 JSON으로 받은 데이터를 객체로 변환하여 요청을 인증하고 비지니스 계층으로 전달한다. 간단히 말해서 뷰, 즉 프론트엔드 부분으로 구성됨 Business Layer (비지니스 계층)비지니스 계층은 모든 비즈니스 로직을 처리하며 서비스 클래스로 구성되어 데이터 엑세스 계층에서 제공하는 서비를 사용합니다. 그리고 권한 부여 및 유효성 검사를 수행합니다. 데이터 엑세스 계층: DAO나 Repository와 같은 데이터 베이스와 직접 접근하는 계층...
기존 Controller @RequiredArgsConstructor @Controller public class IndexController { private final GamesService gamesService; private final HttpSession httpSession; @GetMapping("/") public String index(Model model){ model.addAttribute("games", gamesService.findAllPaging(0,9)); SessionUser user = (SessionUser) httpSession.getAttribute("user") if (user != null) { model.addAttribute("userName",user.ge..
1. Security 설정 스프링 시큐리티를 사용하는데 쓸 기능들을 명시해준다 @RequiredArgsConstructor // 스프링 시큐리티 설정 활성화 @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { private final CustomOAuth2UserService customOAuth2UserService; protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .headers().frameOptions().disable().disable() .authorizeRequests() //URL 별 ..