2017-12-21 4 views
0

지난 며칠 동안 나는 자바로 암호화 된 SOAP 웹 서비스를 만들기 위해 고심하고있다. 누구든지 저에게 어떻게 제안 할 수 있습니까?자바에서 x.509를 사용하는 SOAP 암호화

내가 지금까지 한 것을 보여 드리겠습니다.

1) Person.java (POJO의 CLASS)

package com.journaldev.jaxws.beans; 

import java.io.Serializable; 

public class Person implements Serializable{ 

private static final long serialVersionUID = -5577579081118070434L; 

private String name; 
private int age; 
private int id; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public int getAge() { 
    return age; 
} 

public void setAge(int age) { 
    this.age = age; 
} 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

@Override 
public String toString(){ 
    return id+"::"+name+"::"+age; 
} 

} 

2) PersonService (인터페이스)

package com.journaldev.jaxws.service; 

import javax.jws.WebMethod; 
import javax.jws.WebService; 
import javax.jws.soap.SOAPBinding; 

import com.journaldev.jaxws.beans.Person; 

@WebService 
@SOAPBinding(style = SOAPBinding.Style.RPC) 
public interface PersonService { 

@WebMethod 
public boolean addPerson(Person p); 

@WebMethod 
public boolean deletePerson(int id); 

@WebMethod 
public Person getPerson(int id); 

@WebMethod 
public Person[] getAllPersons(); 
} 

3) PersonServiceImpl (서비스 구현 클래스)

package com.journaldev.jaxws.service; 

import java.util.HashMap; 
import java.util.Map; 
import java.util.Set; 

import javax.jws.WebService; 

import com.journaldev.jaxws.beans.Person; 

@WebService(endpointInterface = "com.journaldev.jaxws.service.PersonService") 
public class PersonServiceImpl implements PersonService { 

private static Map<Integer,Person> persons = new HashMap<Integer,Person>(); 

@Override 
public boolean addPerson(Person p) { 
    if(persons.get(p.getId()) != null) return false; 
    persons.put(p.getId(), p); 
    return true; 
} 

@Override 
public boolean deletePerson(int id) { 
    if(persons.get(id) == null) return false; 
    persons.remove(id); 
    return true; 
} 

@Override 
public Person getPerson(int id) { 
    return persons.get(id); 
} 

@Override 
public Person[] getAllPersons() { 
    Set<Integer> ids = persons.keySet(); 
    Person[] p = new Person[ids.size()]; 
    int i=0; 
    for(Integer id : ids){ 
     p[i] = persons.get(id); 
     i++; 
    } 
    return p; 
} 

} 

4) SOAP 게시자 (게시자 또는 서버)

package com.journaldev.jaxws.service; 이것은 내가 현재 무엇을했는지이다

package com.journaldev.jaxws.service; 

import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.Arrays; 

import javax.xml.namespace.QName; 
import javax.xml.ws.Service; 

import com.journaldev.jaxws.beans.Person; 

public class SOAPPublisherClient { 

public static void main(String[] args) throws MalformedURLException { 
    URL wsdlURL = new URL("http://localhost:8080/ws/person?wsdl"); 
    //check above URL in browser, you should see WSDL file 

    //creating QName using targetNamespace and name 
    QName qname = new QName("http://service.jaxws.journaldev.com/", "PersonServiceImplService"); 

    Service service = Service.create(wsdlURL, qname); 

    //We need to pass interface and model beans to client 
    PersonService ps = service.getPort(PersonService.class); 

    Person p1 = new Person(); p1.setName("Pankaj"); p1.setId(1); p1.setAge(30); 
    Person p2 = new Person(); p2.setName("Meghna"); p2.setId(2); p2.setAge(25); 

    //add person 
    System.out.println("Add Person Status="+ps.addPerson(p1)); 
    System.out.println("Add Person Status="+ps.addPerson(p2)); 

    //get person 
    System.out.println(ps.getPerson(1)); 

    //get all persons 
    System.out.println(Arrays.asList(ps.getAllPersons())); 

    //delete person 
    System.out.println("Delete Person Status="+ps.deletePerson(2)); 

    //get all persons 
    System.out.println(Arrays.asList(ps.getAllPersons())); 

} 

} 

import javax.xml.ws.Endpoint; 

public class SOAPPublisher { 

public static void main(String[] args) { 
    Endpoint.publish("http://localhost:8080/ws/person", new PersonServiceImpl()); 
} 

} 

5) SOAPPublisherClient (클라이언트). X.509를 사용하여 메시지 본문을 암호화하는 방법을 알고 싶습니다. 서버 코드와 클라이언트 코드 모두에 대해이 문제를 도와 줄 수 있습니까?

+0

및 일부 링크 https://stackoverflow.com/questions/3752075/sign-and-encrypt-soap-messages-with-apache-cxf – gusto2

답변

0

WS-Security이라는 SOAP 확장이 잘 채택되어 있습니다. 표준은 서명되고 암호화 된 메시지가 어떻게 보일 것인가를 정의합니다.

각 프레임 워크에는 메시지 암호화를 설정하는 다른 방법이 있습니다 (cxf, axis2, other?) 어떤 프레임 워크를 사용하는지 잘 모르겠습니다.

CXF의 경우 this reading으로 시작하고 심지어는 samples이 링크되어 있습니다.

이전 프로젝트에서 찾은 코드 스 니펫을 찾을 수 없거나 찾을 수없는 경우이를 허용 할 때 여기에 붙여 넣으려고합니다.

관련 문제