ChamomileGuides 3.0.4 Help

시큐리티(세션) 모듈 사용 가이드

개요

스프링 시큐리티

캐모마일 시큐리티는 스프링 시큐리티를 기반으로 프로젝트에서 공통적으로 사용될 기능을 구현하여 자동구성을 진행해주는 프로젝트이다.

캐모마일의 Security 기능은 Spring Security5.7 기반 하에 작업되었기 때문에 해당 버전 이하의 스프링 시큐리티 동작방식과는 차이가 있을 수 있다.

Session1

authentication(인증)

인증은 사용자의 신원을 확인하는 과정을 의미한다. Chamomile에서의 인증은 Spring Security에서 제공하는 사용자 인증 정보를 RDB로 관리하기 위해 JdbcDaoImpl(UserDetailsService의 구현체)을 확장하여 제공한다.

사용자 인증 정보

사용자의 정보, 사용자가 가진 권한, 사용자가 속한 그룹에 대한 권한 정보를 바탕으로 인증이 이루어진다.

인증 매커니즘

기본적인 인증 매커니즘은 Spring Security의 인증 매커니즘을 그대로 사용하며, 아래와 같은 흐름으로 이루어진다.

  1. 인증 요청
    UsernamePasswordAuthenticationFilter에서 사용자가 입력한 아이디와 비밀번호를 기반으로 UsernamePasswordAuthenticationToken을 생성한다.

  2. AuthenticationManager 위임
    AuthenticationManager에 AuthenticationToken을 전달하여 인증을 위임한다.

  3. Authentication 정보 획득
    AuthenticationManager에 등록된 AuthenticationProvider를 통해 Authentication 정보를 획득한다.

  4. RDB를 통한 인증 정보 획득
    RDB를 통해 사용자 아이디를 기반으로 Authentication 정보를 획득하고, 사용자가 가진 권한 및 사용자가 속한 그룹의 권한 정보를 획득한다.

  5. 사용자 상태 확인 및 인증 수행
    사용자의 기본적인 상태(계정 잠김, 비활성화, 만료 등)를 확인하고, 정상적인 경우 패스워드를 검사하여 인증을 수행한다. 그 후, 비밀번호 상태(비밀번호 만료 등)를 확인한다.

  6. 인증 성공 후 처리
    인증이 성공하면, 원래 요청한 페이지로 redirect 된다.

authorization(인가)

authorization은 누군가에게 무엇을 할 수 있게 하거나, 원하는 정보를 얻을 수 있도록 허용하는 과정이다. (즉, 웹 사이트 개발 시 리소스에 접근하기 위한 권한을 부여/허용하는 과정을 말한다.)

Chamomile에서의 authorization은 권한에 대한 정보를 RDB로 관리 할 수 있도록 기능을 확장하였다.

인가 흐름

  1. 보호되는 자원에 접근하게 되는 경우 FilterSecurityInterceptor에서 요청을 받아 처리하게 된다.

  2. 실제 대상 보호되는 자원에 접근하기 전 beforeInvocation()을 수행하고 권한이 존재하는지 확인하게 된다.

  3. 먼저 현재 요청에 대한 권한 정보를 획득한다. (리소스에 부여된 권한 정보 – RDB로 관리된다.)

  4. 인증이 필요한 경우 인증을 수행한다.

  5. AccessDecisionManager.decide()를 통해 리소스에 대한 접근의 가부를 결정한다. (Spring Security에서는 투표방식으로 접근 여부를 결정한다.)

    • 총 3개의 AccessDecisionManager가 제공된다.

    • AffirmativeBased(하나라도 접근허용 한다면) – 기본설정, ConsensusBased(허용하는것이 접근거부보다 많다면, UnanimousBased(만장일치)

    • 등록 된 AccessDecisionVoter의 투표에 의한 결정.

  6. 접근이 허용되는 경우 요청을 전달하게 되고, AfterInvocationManager를 통한 반환되는 결과에 대한 후처리 작업을 진행하게 된다.

사용법

  1. chamomile-sample-boot-basic 프로젝트 생성

  2. dependency 등록(pom.xml)

    <dependency> <groupId>net.lotte.chamomile.module</groupId> <artifactId>chamomile-security</artifactId> </dependency>
  3. yaml 파일 설정(application.yml)

    chmm: security: # 로그인 처리를 위한 URL 경로를 설정합니다. loginProcessingUrl: /login # 로그아웃 처리를 위한 URL 경로를 설정합니다. logoutProcessingUrl: /logout # 로그인 폼에서 사용자 이름을 받기 위한 파라미터 이름을 설정합니다. usernameParameter: username # 로그인 폼에서 비밀번호를 받기 위한 파라미터 이름을 설정합니다. passwordParameter: password # 기본 비밀번호 인코더로 SHA-256 해시 알고리즘을 사용합니다. defaultPasswordEncoder: sha256 # 사용 가능한 비밀번호 인코더 목록을 설정합니다. 여기서는 SHA-256과 bcrypt를 사용합니다. passwordEncoderList: sha256,bcrypt # 보안 검사를 무시할 URL 패턴 목록을 설정합니다. ignorePatterns: - /security/test rememberMe: false # 유효 기간을 초 단위로 설정합니다. 여기서는 604800초(7일)로 설정합니다. rememberMeValiditySeconds: 604800 # 동시 세션의 최대 수를 설정합니다. -1은 제한이 없음을 의미합니다. maximumSessions: -1 # 로그인 후 리디렉션될 기본 반환 URL을 설정합니다. returnUrl: /index.html
Last modified: 10 1월 2025