티스토리 뷰

Spring Security는 사용자 인증과 인가 등의 보안 관련 기능을 개발자가 구현하기 쉽게 Spring이 제공해주는 라이브러리이다.

 

즉, 로그인이나 권한 설정 같은 기능을 직접 구현하지 않고도 사용할 수 있다는 것인데, 아ㅡ주 편리할 거 같으니 바로 들어가보자.


 우선 Spring Project를 생성하는데, dependency를 추가할 때 필요한 라이브러리와 함께 반드시 Spring Security도 추가해야 한다.

프로젝트 생성 이후 gradle dependency는 다음과 같다.

 

◎build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
    implementation group: 'org.thymeleaf.extras', name: 'thymeleaf-extras-java8time'
    implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '2.7.3'

}

또한 application.properties 파일에도 다음과 같이 시큐리티 설정을 추가한 뒤, 로그 래밸을 좀 더 낮게 설정하여 자세한 로그를 확인할 수 있도록 작성한다.

 

◎application.properties

logging.level.org.springframework.security.web = trace
logging.level.com.choonham = debug

위와 같은 기초 설정을 모두 끝내면, 프로젝트를 실행했을 때 다음 로그와 함께 자동으로 만들어진 로그인 페이지가 나타난다.

 

또한 로그를 확인해보면, 사용자 인증을 위한 임시 패스워드가 발급된 것을 확인할 수 있다.


그 밖에 자세한 Security 설정 및 개발 목적에 맞게 커스터마이징할 수 있도록 다음과 같이 메인 Src 패키지 내에 Config 클래스를 작성해준다. 이때, Config 클래스는 반드시 WebSecurityConfigurerAdapter 클래스를 상속받아야 한다.

 

좀 더 자세한 커스터마이징 및 예제는 다음 포스팅에서 진행할 예정이다.

 

◎SecurityConfig

package com.choonham.security.config;

import lombok.extern.log4j.Log4j2;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@Log4j2
public class SecurityConfig extends WebSecurityConfigurerAdapter {

}

 

간단한 테스트를 위해 Controller와 sample html 파일을 다음과 같이 작성한다.

 

◎Controller

package com.choonham.security.controller;

import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@Log4j2
@RequestMapping("/sample/")
public class SampleController {

    @GetMapping("/all") // 로그인을 하지 않은 사용자도 접근할 수 있는 all
    public void exAll() {
        log.info("exAll...");
    }

    @GetMapping("/member") // 로그인한 사용자만 접근할 수 있는 member
    public void exMember() {
        log.info("exMember...");
    }

    @GetMapping("/admin") // 관리자만 접근할 수 있는 admin
    public void exAdmin() {
        log.info("exAdmin...");
    }
}

 

◎member.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>for member</title>
</head>
<body>
    <h1>MEMBER</h1>
</body>
</html>

이제, sample/member 요청을 브라우저에 보내면 아직 권한이 없기 때문에 다음과 같이 login 페이지로 리다이렉트 된다.

default 아이디인 user와 발급된 비밀번호를 입력하면, 

위와 같이 인증이 완료되어 member 페이지로 다시 리다이렉트 되는 것을 확인할 수 있다.

Comments