JACC(Java Authorization Contract for Containers) 권한 제공자 개발

Liberty 서버에 제공된 com.ibm.wsspi.security.authorization.jacc.ProviderService 인터페이스를 구현함으로써 J2EE(Java™ Platform, Enterprise Edition) 애플리케이션에 대한 사용자 정의 권한 부여 의사결정을 수행하는 데 필요한 JACC 제공자를 개발할 수 있습니다.

시작하기 전에

기본적으로 애플리케이션에 대한 요청이 처리될 때까지 애플리케이션 모듈 로딩이 연기됩니다. 그러나 애플리케이션이 처리될 준비가 되기 전에 애플리케이션에서 전체 모듈의 보안 제한조건을 처리해야 합니다. 연기되는 모듈 로딩은 사용 안함으로 설정되어야 합니다. 다은은 연기되는 모듈 로딩을 사용 안함으로 설정하는 방법을 보여줍니다.
  1. WebContainer의 경우:
    server.xml 파일에 다음 요소를 설정해야 합니다.
    <webContainer deferServletLoad="false"/>
  2. EJBContainer의 경우:
    server.xml 파일에서 다음 특성이 설정되어야 합니다.
    <ejbContainer startEJBsAtAppStart="true"/>
    참고: 이전 요소가 설정되지 않는 경우 서버 시작 시에 완전한 보안 제한사항 정보가 써드파티 JACC 제공자에게 전파되지 않을 수 있습니다. 따라서 써드파티 JACC 제공자가 올바른 권한 부여 의사결정을 적용하지 않을 수 있습니다.

이 태스크 정보

Java Authorization Contract for Containers 스펙인 JSR 115는 권한 제공자용 인터페이스를 정의합니다. Liberty 서버에서 JACC 제공자를 사용자 기능으로 패키지해야 합니다. 사용자 기능은 com.ibm.wsspi.security.authorization.jacc.ProviderService 인터페이스를 구현해야 합니다.

프로시저

  1. com.ibm.wsspi.security.authorization.jacc.ProviderService 인터페이스를 구현하는 서비스를 제공하는 OSGi 컴포넌트를 작성하십시오.

    ProviderService 인터페이스가 두 메소드를 정의합니다. Liberty 런타임이 java.security.Policy 추상 클래스를 구현하는 정책 클래스의 인스턴스를 검색하기 위해 호출하는 getPolicy 메소드입니다. 또한 Liberty 런타임이 javax.security.jacc.PolicyConfigurationFactory 추상 클래스를 구현하는 PolicyConfigurationFactory 클래스의 인스턴스를 검색하기 위해 호출하는 getPolicyConfigFactory 메소드입니다.

    다음 예에서는 OSGi 선언 서비스 어노테이션을 사용합니다.
    package com.mycompany.jacc;
    
    import com.mycompany.jacc.MyAuthConfigProvider;
    import com.ibm.wsspi.security.authorization.jacc.ProviderService;
    import java.security.Policy;
    import java.util.Map;
    import javax.security.jacc.PolicyConfigurationFactory;
    import org.osgi.service.component.ComponentContext;
    import org.osgi.service.component.annotations.Activate;
    import org.osgi.service.component.annotations.Component;
    import org.osgi.service.component.annotations.Deactivate;
    
    // The property value of javax.security.jacc.policy.provider which defines the implementation class of Policy and
    // javax.security.jacc.PolicyConfigurationFactory.provider which defines the implementation class of PolicyConfigurationFactory, are required for propagating the properties to the Liberty runtime.
    
    @Component(service = ProviderService.class,
      immediate = true,
      property = {
        "javax.security.jacc.policy.provider=com.myco.jacc.MyPolicy",
        "javax.security.jacc.PolicyConfigurationFactory.provider="
        + "com.myco.jacc.MyFactoryImpl"
      }
    )
    
    public class MyJaccProviderService implements ProviderService {
        Map<String, String> configProps;
    
        // This method called by the Liberty runtime
        // to get an instance of Policy class
        @Override
        public Policy getPolicy() {
            return new myPolicy();
        }
    
        // This method called by the Liberty runtime
        // to get an instance of PolicyConfigurationFactory class
        @Override
        public PolicyConfigurationFactory getPolicyConfigurationFactory() {
            ClassLoader cl = null;
            PolicyConfigurationFactory pcf = null;
            System.setProperty(
              "javax.security.jacc.PolicyConfigurationFactory.provider",
              "com.myco.jacc.MyFactoryImpl");
            try {
                cl = Thread.currentThread().getContextClassLoader();
                Thread.currentThread().setContextClassLoader(
                                  this.getClass().getClassLoader());
                pcf = PolicyConfigurationFactory.getPolicyConfigurationFactory();
            } catch (Exception e) {
                return null;
            		} finally {
                Thread.currentThread().setContextClassLoader(cl);
            }
            return pcf;
        }
    
        @Activate
        protected void activate(ComponentContext cc) {
            // Read provider config properties here if needed,
            // then pass them to the Provider ctor.
            // This example reads the properties from the OSGi
            // component definition.
            configProps = (Map<String, String>) cc.getProperties();
        }
    
        @Deactivate
        protected void deactivate(ComponentContext cc) {}
    }
  2. JACC 제공자와 함께 컴포넌트를 사용자 기능의 일부인 OSGi 번들에 패키지하십시오.
  3. 기능이 OSGi 서브시스템 컨텐츠를 포함하는지 확인하십시오. com.ibm.ws.javaee.jacc.1.5; version="[1,1.0.100)"; location:="dev/api/spec/"
  4. 기능이 사용자 제품 확장 위치에 설치된 후, 기능 이름으로 server.xml 파일을 구성하십시오. 예를 들어 다음과 같습니다.
    <featureManager>
       ...
       <feature>usr:myJaccProvider</feature>
    </featureManager>

주제의 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: Monday, 5 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_developing_jacc_auth_provider
파일 이름: twlp_developing_jacc_auth_provider.html