Class SecurityServiceConfig

java.lang.Object
com.easydesk.web.config.SecurityServiceConfig

@Configuration @ComponentScan(basePackages="com.easydesk.security,com.easydesk.modules,com.easydesk.pipeline,com.easydesk.spring") public class SecurityServiceConfig extends Object
앱 구동 시 내장 HSQLDB -> Torque 초기화 순서로 빈을 구성하고, com.easydesk.security, com.easydesk.modules.security 두 패키지를 컴포넌트 스캔해서 adaptor들과 SecurityService 구현체들을 스프링이 직접 구성/주입하게 한다. 2026-09-19 추가: com.easydesk.pipeline, com.easydesk.spring 두 패키지도 스캔 목록에 더했다. 원래 Turbine 의 AnnotationProcessor 로 서비스를 주입하던 core/workflow 쪽(WorkflowFactory, AddItemValve/UpdateItemValve 등)을 Spring 의 AutowireCapableBeanFactory 로 옮기면서, 그 대체 진입점인 SpringBeanFactoryHolder(com.easydesk.spring)와 그게 주입해 줄 PipelineService 구현체인 DefaultPipelineService(com.easydesk.pipeline)가 실제로 빈이 되어야 하기 때문이다 - 이전까지는 둘 다 easydesk-spring-pipeline 자신의 테스트에서만 컴포넌트 스캔됐고, 이 데모 앱 컨텍스트에는 전혀 등록된 적이 없었다. 예전엔 adaptor를 문자열 클래스명 + 리플렉션(configuredAdaptors() Map, DefaultSecurityService#setConfiguredAdaptors)으로 만들었는데, UserManagerAdaptor가 CredentialService처럼 생성자 의존성이 필요해지면서 그 방식으로는 더 이상 못 만든다. 그래서 adaptor(@Component)와 SecurityService 구현체(@Service, 생성자로 UserManager 등 인터페이스를 주입받음)를 라이브러리 쪽에서 전부 스프링 빈으로 바꿨고, 여기서는 컴포넌트 스캔만 켜준다. 주의: 이 스캔 범위에는 SecurityService 구현체가 DefaultSecurityService (easydesk-spring-security, 빈 이름 "defaultSecurityService")와 ModuleSecurityService (easydesk-spring-modules, 빈 이름 "moduleSecurityService") 두 개 있어서, SecurityService 타입 빈도 두 개 등록된다 ("빈이 두 개" 문제는 여전히 있다 — 사라진 게 아니라
  • Constructor Details

    • SecurityServiceConfig

      public SecurityServiceConfig()
  • Method Details

    • embeddedHsqlDatabase

      @Bean(destroyMethod="close") public EmbeddedHsqlDatabase embeddedHsqlDatabase() throws Exception
      Throws:
      Exception
    • torqueInitializer

      @Bean public SecurityServiceConfig.TorqueInitializer torqueInitializer(EmbeddedHsqlDatabase embeddedHsqlDatabase) throws Exception
      embeddedHsqlDatabase 빈이 먼저 만들어진 뒤 Torque 를 초기화하도록 메서드 파라미터로 의존관계를 명시했다 (Spring이 생성 순서를 보장). 예전엔 securityService() 빈이 이 TorqueInitializer를 파라미터로 받아서 "Torque 초기화 후에 SecurityService 생성"을 강제했는데, 이제 SecurityService 구현체들(DefaultSecurityService, ModuleSecurityService)은 컴포넌트 스캔으로 만들어지기 때문에 그 연결고리가 없다. 대신 이 빈도 다른 싱글톤 빈들과 마찬가지로 컨텍스트 refresh 시점(=애플리케이션이 실제 요청을 받기 전)에 즉시(eager) 생성되고, adaptor들은 생성자 시점엔 Torque를 건드리지 않고 실제 요청 처리 시점에만 사용하므로 순서 문제는 없다. 다만 만약 어떤 adaptor가 생성자에서 바로 Torque/Peer 클래스를 호출한다면 이 가정이 깨지니 주의.
      Throws:
      Exception
    • registIdBroker

      public static void registIdBroker() throws TorqueException
      Throws:
      TorqueException
    • loadOM

      protected static void loadOM() throws Exception
      Throws:
      Exception