스프링 시큐리티 - 프로젝트 생성과 기본 설정

SeungTaek·2022년 2월 9일
1
post-thumbnail

본 게시물은 스스로의 공부를 위한 글입니다.
잘못된 내용이 있으면 댓글로 알려주세요!

프로젝트 생성하기

dependency로 spring-boot-starter-web만 선택 한 후 스프링 프로젝트를 생성하자. Maven이나 gradle 상관 없지만, 이 게시물에서는 Maven으로 진행한다.


간단한 컨트롤러를 생성해보자.

@RestController
public class SecurityController {
    @GetMapping("/")
    public String index() {
        return "home";
    }
}

http://localhost:8080/으로 접속을 해보자.
다음과 같은 화면이 뜬다.

이번에는 스프링 시큐리티 디펜던시를 추가해보자.

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
</dependency>

서버 재시작 후 아까와 동일하게 http://localhost:8080/으로 접속을 해보자. 그럼 다음과 같은 로그인 페이지 화면이 뜬다.
뭔가 심플하면서 매력있는 로그인 페이지다.

제공되는 기본 계정을 이용해서 로그인 해보자.
username: user, password: 콘솔창 문자열
패스워드는 다음과 같은 콘솔창 중간에서 확인이 가능하다. 로그인해야 우리가 만든 페이지로 이동이 가능하다.


우리가 이 페이지를 만든 적이 있나? 없다.
그럼 누가 이 페이지를 만들어서 로그인하게 만드는 것인가. 바로 스프링 시큐리티다.


스프링 시큐리티 보안 설정

스프링 시큐리티의 의존성을 추가만 해도 다음과 같은 일들이 벌어진다.
1. 모든 요청은 인증이 되어야 자원에 접근이 가능하다.
2. 인증 방식은 폼 로그인 방식과 httpBasic 로그인 방식을 제공한다.
3. 기본 로그인 페이지를 제공한다.
4. 기본 계정을 한 개 제공한다.


앞으로 우리가 해야할 일은 스프링 시큐리티가 제공하는 기능들과 설정들을 이용해서 세부적이고 추가적인 보안 기능을 사용하는 것이다. 스프링 시큐리티에서 핵심적인 설정 클래스는 WebSecurityConfigurerAdapter이다. 세부적인 보안 기능을 설정할 수 있는 API를 제공하는 클래스는 HttpSecuritty이다.
따라서 우리는 사용자 정의 설정 클래스를 만들어서 제공하는 API를 이용해 설정을 마치면 된다.


HttpSecurity가 제공하는 API는 2가지 종류이다. 인증 API와 인가 API. 구현 메서드는 다음과 같다.

인증 API

  • http.formLogin()
  • http.logout()
  • http.csrf()
  • http.httpBasic()
  • http.SessionManagement()
  • http.RememberMe()
  • http.ExceptionHandling()
  • http.addFilter()

인가 API

  • http.authorizeRequests()
  • http.antMatchers()
  • http.hasRole()
  • http.permitAll()
  • http.authenticated()
  • http.acess(hasRole())
  • http.denyAll()

각 API별 디테일한 이야기는 다른 게시물에서 알아보자.


간단한 보안 설정 클래스를 작성해보자.
위에서 말했듯, 핵심 보안 설정 클래스인 WebSecurityConfigurerAdapter을 extends 후 configure(HttpSecurity http)를 오버라이드 받아서 설정하면 된다.

@Configuration // 설정 파일이므로 필요
@EnableWebSecurity // 스프링 시큐리티를 사용한다는 의미이다.
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http    .authorizeRequests() // 시큐리티 처리에 HttpServletRequest를 이용
                .anyRequest().authenticated(); // 모든 요청에 인증 필요

        http    .formLogin(); // 폼 로그인 방식 사용
    }
}

매번 콘솔창에 있는 패스워드를 복사, 붙여넣기 하면 귀찮으니, 자동 생성되는 계정의 이름과 비밀번호를 다음과 같이 직접 명시해줄 수도 있다.

# application.properties
spring.security.user.name=user
spring.security.user.password=1111


Reference

인프런 '스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security' (정수원)

profile
I Think So!

0개의 댓글