[java] Apache CXF의 WS-Security

Apache CXF는 Java에서 웹 서비스를 개발하고 통합하는 데 사용되는 오픈 소스 웹 서비스 프레임워크입니다. 이 프레임워크는 WS-Security(웹 서비스 보안)를 구현하는 데도 사용됩니다.

WS-Security는 웹 서비스 메시지를 암호화하고 압축하는 기술로, 보안 요구 사항을 충족시키기 위해 사용됩니다. Apache CXF를 이용하여 웹 서비스를 보안하는 과정은 다음과 같습니다.

WS-Security 설정

  1. 의존성 추가: Maven을 사용하는 경우, pom.xml에 CXF 라이브러리 의존성을 추가합니다.

    <dependencies>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-ws-security</artifactId>
            <version>${cxf.version}</version>
        </dependency>
    </dependencies>
    
  2. 클라이언트 측 설정: 클라이언트에서 웹 서비스를 호출할 때, WS-Security가 필요한 경우 CXFWSS4J 보안 인터셉터를 사용하여 보안 헤더를 추가합니다.

    // Create a client with WS-Security configured
    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
    factory.setAddress("https://example.com/Service");
    factory.setServiceClass(YourServiceClass.class);
       
    WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(Collections.singletonMap(
            WSS4JOutInterceptor.ACTION, WSS4JOutInterceptor.USERNAME_TOKEN));
       
    factory.getOutInterceptors().add(wssOut);
       
    YourServiceClass client = (YourServiceClass) factory.create();
    
  3. 서버 측 설정: 웹 서비스를 제공하는 경우, 서버의 cxf.xml 설정 파일에서 보안 정책을 구성합니다.

    <jaxws:endpoint ...>
        <jaxws:features>
            <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
                <constructor-arg>
                    <map>
                        <entry key="action" value="UsernameToken"/>
                    </map>
                </constructor-arg>
            </bean>
        </jaxws:features>
    </jaxws:endpoint>
    

Apache CXF를 사용하여 웹 서비스를 보안하는 것은 WS-Security를 구현하는 간단하면서도 강력한 방법입니다. 이를 통해 웹 서비스 통신을 안전하게 유지할 수 있습니다.

참고문헌: