문제

나를 호출해야 웹 서비스로 작성됩니다.순서 Java.웹 서비스를 구현하는 WS-Security 스택(중 WSE2WSE3,그것에서 분명하지 않는 정보).

한 정보는 서비스로부터 받은 공급자가 포함 WSDL,a policyCache.config 파일에 일부 샘플 C#는 코드 샘플을 수 있는 응용 프로그램에 성공적으로 서비스를 호출합니다.

이는 유용하지 않으로 그리기 때문에 명확하지 않는 방법을 내가 해야하는 이 정보를 사용하여 작성 Java 클라이언트입니다.는 경우에는 웹 요청을 서비스하지 않 서명된 정책에 따라 그것에 의하여 거절 서비스입니다.내가 사용하고 아파치 Axis2 및 수 있는 방법에는데 사용하 policyCahce.config 파일 WSDL 를 생성하는 클라이언트입니다.

거기에 몇 가지 예가 웹에서 발견 그러나 모든 경우에서의 저자들은 예의를 모두 서비스 및 클라이언트와 그래서 만들 수 있었을 쥔 양쪽에서 그것을 얻기 위해 작동합니다.나에서는 위치입니다.

는 사람이 성공적으로?

도움이 되었습니까?

해결책 2

이 될 것으로 보인 인기있는 질문에 그래서 나는 대한 개요를 제공 우리가 무슨 짓을했는지에 상황이다.

그것은 보인다는 서비스를 제공합니다.는 다음과 같은 이전 ws-addressing 표준(http://schemas.xmlsoap.org/ws/2004/03/addressing/ 다)및 axis2 이해하고 새로운 표준(http://schemas.xmlsoap.org/ws/2004/08/addressing/).

또한,policyCache.config 파일에 제공하는 양식에서는 axis2rampart 모듈을 이해할 수 없습니다.

그래서 단계를 해야했습니다,간단히 말해서:

  • 읽 policyCache.구성하려고 그것을 이해합니다.그런 다음 다시 작성 하는 정책으로 성벽을 이해할 수 있었다.(일부 업데이트 문서 었습니다.)
  • 구성 성벽으로 이 정책이 있습니다.
  • 쇠를 가지고 있던 제공합니다.웹 파일 변환 java 키를 저장합니다.있는 유틸리티와 함께 제공 부두가 할 수 있습니다.
  • 구성 성벽으로는 키를 저장합니다.
  • 쓰 사용자 지정 axis2 처리기는 뒤로 변환하는 새로운 ws-addressing 는 물건의 axis2 로가 예상되는 서비스입니다.
  • 구성 axis2 을 사용하여 처리기에 보내는 메시지입니다.

결국 그것의 많은 구성 코드에 대한 무언가가 있어야 오픈 표준에 의해 지원되는 공급 업체입니다.

하지만 나는 무엇인지 대안이 있습니다 기다리는 업체(또는 이 경우에는 공급업체)모든 것이 있는지 확인하는 것입니다 inter-op?

으로 포스트스크립트를 추가하지 않았던 그는 끝까지 작업을 하 고,그것은 다른 사람 팀 내에,그러나 제 생각에 현저한 세부 사항 정확합니다.다른 옵션이었다는 것을 고려하(기 전에 나의 팀 동료했)를 호출하 WSS4J API 를 직접를 구성하는 비누로 봉투.NET 서비스습니다.내가 생각하는 것도했다.

다른 팁

WS-보안 규격지 않은 일반적으로 포함되어 WSDL(지에 WSE WSDL).그래서 wsdl2java 있다는 것을 알고하지 않습니 WS 보안에도 필요한 서비스를 관리 할 수 있습니다.는 사실은 보안한 제약 조건에 존재하지 않 WSE WSDL 은 큰 실망을 나(WCF 포함됩니다 WS-신뢰 정보 WSDL).

클라이언트에서 결국,당신은 당신을 사용해야 Rampart 추가 필요한 WS 보안 헤더를 보내는 클라이언트 메시지입니다.이후 WSDL 보고하지 않습 무엇 WS 보안 설정이 필요하다,당신이 최고의 요청에 의해 서비스 제공자는 필요한 것입니다.WS-보안 요구사항 간단 수 있습니다 암호를 일반 텍스트나 수 있습 X509 인증서에나 있을 수 있는 암호화된 메시지.....성벽의 처리할 수 있어야의 대부분은 이러한 시나리오를 보여 줍니다.

아파치 성벽은"켜진"여 모듈 axis2.xml 파일입니다.다운로드해야 합니다 성벽 모듈에 넣어는 특정 장소에서 axis2directory,다음 xml 을 수정 파일입니다.할 수도 있습니다 참여하며 프로그래밍(주시기 바랍정이 원래 질문하는 경우 이 필요하고 내가 편집 이 응답).

를 구성하는 방법에 따라 성벽(를 통해 다른 XML 파일이나 프로그래밍),it will intercept 모든 보내는 메시지와 필요한 추가 WS-정보 보안합니다.나 개인적으로 사용되는 axis2 와 성벽을 전화 WSE3 서비스로 보호된 UsernameToken 일반 텍스트 바랍니다.비슷하지만,좀 더 복잡한 시나리오에서도 작동합니다.더 많은 정보를 설정하는 방법에 시작으로 성벽이 사이트에서 링크된다.이 있는 경우 문제에 대한 세부 사항의 성벽이나 사용하는 방법은 램의 특정 WSE 설정한 다음,편집 및면 좋겠습니다.

@마이크

나는 최근에 와서 시험과 이것은 코드가 사용됩니다.나는 사용하지 않는 물,그러나 내가 사용하는 WS 보안 일반 텍스트와 인증이 있습니다.서 처음으로는 정말 좋은 설명서에 이러한 목표를 달성하는 방법에 물건입니다.

내가 사용하는 wsdl2java 고 다음을 추가 이 코드를 사용하여 웹 서비스에 ws-보안입니다.

내가 당신을 도움이되기를 바랍니다.

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.WSPasswordCallback;
import org.apache.ws.security.handler.WSHandlerConstants;

public class ServiceTest implements CallbackHandler
{

     public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {

            WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
            // set the password for our message.
            pc.setPassword("buddah");
        }

    public static void main(String[] args){
        PatientServiceImplService locator = new PatientServiceImplService();
        PatientService service = locator.getPatientServiceImplPort();

        org.apache.cxf.endpoint.Client client = org.apache.cxf.frontend.ClientProxy.getClient(service);
        org.apache.cxf.endpoint.Endpoint cxfEndpoint = client.getEndpoint();

        Map<String, Object> outProps = new HashMap<String, Object>();
        outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN + " " +  WSHandlerConstants.TIMESTAMP);
        outProps.put(WSHandlerConstants.USER, "joe");
        outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);

        // Callback used to retrieve password for given user.
        outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, ServiceTest.class.getName());

        WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
        cxfEndpoint.getOutInterceptors().add(wssOut);


        try
        {
            List list = service.getInpatientCensus();
            for(Patient p : list){
                System.out.println(p.getFirstName() + " " + p.getLastName());
            }

        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

기술설 -찾을 것으로서 처음으.내가 사용했던 그것을 만드 웹 클라이언트 및 서비스에서 java 를 사용하여 ws-보안.내가 연결되어 있다.net 웹 서비스를니다.

그들은 매우 좋은 설명서를 너무입니다.나는 더 많은 행운을 가진 그것보다 축입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top