config 패키지를 생성하고, SecurityConfig 클래스를 생성하여 시큐리티 인가 작업을 추가해보도록 하자. 스프링 시큐리티 6버전부터는 람다식 형태로 작성해야 한다. 또한, filterChain 방식으로 인가를 구현해야 하는데, 시큐리티 5버전과 많이 달라서 이에 대한 학습이 필요하다. requestMatchers는 특정한 경로에게 인가를 작용시키는 메서드이고, anyRequest는 나머지 경로를 말한다. 순서가 매우 중요하므로 anyRequest는 항상 맨 마지막에 나타내는게 좋을 것 같다. / 경로와 /login 경로는 인가를 하지 않도록 열어두고, /admin 경로만 인가작업을 하도록 설정해준 후에, admin.mustache 파일과 AdminController를 생성하여 /admin경로..
먼저 brew로 mysql을 설치해주고 실행해보자. 그 다음 brew services라고 터미널에 입력하면, 현재 brew 서비스 상태를 보여주는데, mysql이 실행중이지 않다면 brew services start mysql을 입력해주면 된다. brew로 mysql을 설치했다면, Default username은 root이고, password는 아무것도 없는 상태인 공란이다. 포트는 3306이 mysql의 기본 포트. 그러면 이제 프로젝트를 생성해 보자. IntelliJ Ultimate 버전을 사용 중이라면, new Project를 눌러, 아래와 같은 의존성들을 추가해주자. IntelliJ가 Community 버전이라면, start.spring.io 위 사이트에서 똑같이 작업을 해주면 된다. resour..
우리의 스프링 부트 어플리케이션은 서블릿 컨테이너라는 톰캣 서블릿 컨테이너 위에 존재하게 된다. 클라이언트로부터 요청이 들어오면, 먼저 서블릿 컨테이너가 그 요청을 받아서, 그 안에 필터들을 거친 후에, 스프링 부트 컨트롤러에 그 요청이 도달하게 된다. 스프링 시큐리티는, Security Config라는 자바 Config 파일을 등록해두면, 스프링 필터에, 특정한 필터를 추가해서 특정한 요청을 가로챈다. 가로챈 후에, 어떠한 특정 권한을 가지고 있는지 분석을 하는데, 권한이 없다면 요청을 막게 된다. 로그인 같은 경우에는 모든 필터에 이 로그인 페이지를 접근을 허용한 다음, 스프링 부트 컨트롤러에 접근하면 그 다음 인증을 수행한다. 인증이 수행되고, 마이 페이지 컨트롤러 같은 인증이 필요한 컨트롤러에 접..
사용자는 자격 증명을 로그인 페이지에 입력하여 백엔드 웹 애플리케이션에 요청을 시작한다. 브라우저 모바일 웹 또는 Postman을 통해 클라이언트는 Spring Security 프레인워크로 보호된 이 요청을 전송한다. 1. 들어오는 요청 필터링 요청이 서블릿 컨테이너 또는 톰캣 서버에 도착하면 클래스 경로 설정으로 인해 내장된 Spring Security 필터가 모든 들어오는 요청을 감시한다. 이 필터들은 구성된 경로를 기반으로 요청된 자원이 보호되었는지 여부를 판단한다. 2. 초기 인증 처리 자원이 보호되면 필터는 해당 사용자에게 강제로 인증을 요구할지 여부를 결정한다. 필요한 경우 로그인 페이지가 사용자의 첫 번째 보호 웹 페이지 액세스를 위해 표시된다. 3. 이후의 인증 확인 이후의 시도에서 필터는..
어떤 자바 웹 어플리케이션이던지 요청을 받으면 그것을 HTTP프로토콜로 전송한다. 왜? 우리 브라우저들은 HTTP 프로토콜로만 이해할 수 있기 때문. HTTP프로토콜을 이용해서 내 브라우저들은 내 WAS에 요청을 보낼 수 있다. (프론트 -> 백) 서블릿 내 자바 코드들은 이러한 HTTP프로토콜 요청을 이해할 수 없어서 자바코드와 브라우저 사이에 중개자가 존재한다. 이 중개자를 우리는 서블릿 컨테이너(Servlet Container) 또는 웹 서버라고 부른다. 우리는 서블릿 컨테이너인 Apache Tomcat같은 웹 서버를 사용한다. 이 중개자, 서블릿 컨테이너가 할 일은 브라우저로부터 받은 HTTP메시지를 ServlerRequest Object로 변환하는 것이다. 그리고 이 동일한 Object를 WAS..
애플리케이션 보호는 항상 흥미롭지만 동시에 너무 까다롭다. 우리가 고유한 코드나 프레임워크를 사용하면서 발생하는 웹 어플리케이션의 취약성을 매일 다방면으로 고려하고 대응해야 하기 때문이다. 해커들은 더 많은 취약점을 찾고, 보안 위협이 증가하고 있으며, 매일 수백 개의 보안 취약점이 발견되고 있다. 이런 어려움을 극복하기 위해 우리는 스프링 시큐리티와 같은 프레임워크를 채택하게 된다. 스프링 시큐리티는 보안에 중점을 둔 헌신적인 개발자들이 구축한 강력한 프레임워크를 제공한다. 우리는 보안 전문가가 아니지만, 스프링 시큐리티를 도입함으로써 그들이 이미 구현한 탁월한 기능을 활용할 수 있다. 1. 비즈니스 로직에 집중할 수 있는 여유 우리는 고객들의 새로운 요구사항을 수용하면서도 보다 향상된 비즈니스 로직을..