2017-02-06 1 views
0

이미 Java 8 런타임을 사용하여 JAX-WS를 구현했습니다. '인증 : 기본 ...'내가 수동으로 추가하는 방법을 알고JAX-WS : SOAP : JRE를 사용하여 서버를 구현하십시오.

  1. : 클라이언트 측에서 헤더를,하지만 난 클라이언트를 원하는 는 지금은 클라이언트와 서버 양쪽에서 기본 인증 지원을 추가 할 필요가 서버에서 401 응답 만 수신하면 추가합니다.
  2. 이 헤더 값을 확인하고이 헤더가 없거나 자격 증명 검사가 통과되지 않은 경우 401 응답을 반환하도록 서버를 만드는 방법을 알지 못합니다.
  3. JRE (Tomcat, Weblogic, Glassfish 등 없음) 기반의 구현이 필요합니다.

답변

1

이미 문제를 해결했을 수도 있지만 다른 사람들이 사용하고 있다면 샘플 구현을 제공하고 싶습니다.

서버 :

private static class AuthenticatorServer extends com.sun.net.httpserver.BasicAuthenticator { 

    private final String user; 
    private final String pwd; 

    public AuthenticatorServer(String realm, String user, String pwd) { 
     super(realm); 
     this.user = user; 
     this.pwd = pwd; 
    } 

    @Override 
    public boolean checkCredentials(String userNameInput, String passwordInput) { 

     return StringUtils.equals(user, userNameInput) && StringUtils.equals(pwd, passwordInput); 

    } 

} 

그리고 클라이언트 측 :

javax.xml.ws.Endpoint serverEndpoint = Endpoint.create(new MyService()); 

com.sun.net.httpserver.HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0); 

com.sun.net.httpserver.HttpContext httpContext = server.createContext("/myservice"); 

server.start(); 

AuthenticatorServer authenticatorServer = new AuthenticatorServer("myRealm", "myName", "myPwd"); 

httpContext.setAuthenticator(authenticatorServer); 

serverEndpoint.publish(httpContext); 

AuthenticatorServer가

AuthenticatorClient authenticatorClient = new AuthenticatorClient("myName", "myPwd"); 

Authenticator.setDefault(authenticatorClient); 

javax.xml.namespace.QName qName = new QName(namespaceURI, WS_SERVICE_NAME); 
java.net.URL wsdlAddress = new URL(namespaceURI + WS_SERVICE_NAME + "?wsdl"); 

MyService service =(Service.create(wsdlAddress, qName)).getPort(MyService.class); 

AuthenticatorClient은 다음과 같습니다

private static class AuthenticatorClient extends java.net.Authenticator { 

    private final String user; 
    private final String pwd; 

    public AuthenticatorClient(String user, String pwd) { 
     this.user = user; 
     this.pwd = pwd; 
    } 

    @Override 
    public PasswordAuthentication getPasswordAuthentication() { 
     return (new PasswordAuthentication(user, pwd == null ? null : pwd.toCharArray())); 
    } 

} 
관련 문제