자바 웹 서비스 인터페이스 방문, 헤드 정보 획득

6096 단어 Java배우다.
1. 웹 서비스 인터페이스 방문
웹 서 비 스 를 방문 하 는 방식: http 로 post 요청 을 직접 보 냅 니 다.
  • xml 데이터 맞 추기
  • private String getXML(String time, String sign, String name)  {
    
    	String xml="\r
    " + "
    \r
    " + " \r
    " + " "+time+"\r
    " + " "+sign+"\r
    " + "
    \r
    " + "
    \r
    " + " \r
    " + " \r
    " + " "+name+"\r
    " + "
    \r
    " + " \r
    " + "
    "; return xml; }
  • 전송 요청, 액세스 인터페이스
  • @ResponseBody
    @RequestMapping("/getRes")
    public String getRes() {
       String url1 = "http://127.0.0.1:8011/demo/services/hello";
       StringBuilder sb = new StringBuilder();
       InputStream is = null;
       InputStreamReader isr = null;
       BufferedReader br = null;
       OutputStream os = null;
       try {
    	   //   :      
    	   URL url = new URL(url1);
    	   //    
    	   HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    	   //   :      
    	   //3.1      :POST      
    	   connection.setRequestMethod("POST");  
    	   //3.2      :content-type  
    	   connection.setRequestProperty("content-type", "text/xml;charset=utf-8");  
    	   //3.3      ,        connection      ,  
    	   connection.setDoInput(true);  
    	   connection.setDoOutput(true);
    	   //   :  SOAP  ,      
    	   String time = "1568958856730";
    	   String sign = "L69yyZXc6CwjXgpw5vE89AZFxTvGu6Rqr/62UbNFfHk=";
    	   String name = "  ";
    	   String soapXML = getXML(time,sign,name);
    	   os = connection.getOutputStream();  
    	   os.write(soapXML.getBytes()); 
    	   //   :       ,    
    	   int responseCode = connection.getResponseCode();
    	   if(responseCode==200){
    		   is = connection.getInputStream();  
    		   isr = new InputStreamReader(is);  
    		   br = new BufferedReader(isr);  
    		   sb = new StringBuilder();  
    		   String temp = null;  
    		   while(null != (temp = br.readLine())){  
    			   sb.append(temp);  
    		   }  
    	   }else{
    		   sb.append("    ");
    		   System.out.println("      ,   :"+responseCode);
    		   return sb.toString();
    	   }
       } catch (Exception e) {
    	   e.printStackTrace();
       }finally {
    	  try {
    		  is.close();  
    		  isr.close();  
    		  br.close();
    		  os.close();
    	  } catch (IOException e) {
    		  e.printStackTrace();
    	  }
       }
       return sb.toString();
    }
    
  • controller 방법 을 방문 하여 응답 데 이 터 를 성공 적 으로 가 져 왔 습 니 다
  • http://127.0.0.1:8011/demo/demo/getRes
        !     :Fri Sep 20 15:34:21 CST 2019
    

    2. 요청 정보 획득
  • 차단기 작성
  • import java.util.Enumeration;
    import java.util.List;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.cxf.binding.soap.SoapMessage;
    import org.apache.cxf.headers.Header;
    import org.apache.cxf.interceptor.Fault;
    import org.apache.cxf.message.Message;
    import org.apache.cxf.phase.AbstractPhaseInterceptor;
    import org.apache.cxf.phase.Phase;
    import org.apache.cxf.phase.PhaseInterceptorChain;
    import org.apache.cxf.transport.http.AbstractHTTPDestination;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;
     
     
    public class WebServiceInterceptor extends AbstractPhaseInterceptor {
     
        public WebServiceInterceptor() {
            super(Phase.PRE_INVOKE);
        }
        @Override
        public void handleMessage(SoapMessage soapMsg) throws Fault {
            
            Message msg = PhaseInterceptorChain.getCurrentMessage();
            HttpServletResponse response = (HttpServletResponse) msg.get(AbstractHTTPDestination.HTTP_RESPONSE);
            HttpServletRequest request = (HttpServletRequest) msg.get(AbstractHTTPDestination.HTTP_REQUEST);
            Enumeration headerNames = request.getHeaderNames();
            
            while (headerNames.hasMoreElements()) {
                String headerName = (String) headerNames.nextElement();
                String header = request.getHeader(headerName);
                System.out.println(headerName+":"+header);
            }
            
            System.out.println("===================================");
            
            List
    headers = soapMsg.getHeaders();// soap for (Header header : headers) { Element ele = (Element) header.getObject(); NodeList nodeList = ele.getChildNodes(); for(int i = 0 ; i< nodeList.getLength();i++) { String textContent = nodeList.item(i).getTextContent(); String nodename = nodeList.item(i).getNodeName(); System.out.println("nodename:"+nodename+";textContent:"+textContent); } } } }
  • Endpoint 에 차단기 설정 추가
  • //    
    @Bean
    public Endpoint endpoint() {
    	//         
    	EndpointImpl endpoint = new EndpointImpl(springBus(), getHelloWorld());
    	endpoint.publish("/hello");
    	endpoint.getInInterceptors().add(createCheckAuthInterceptor());  //      
    	return endpoint;
    }
    
    @Bean
    public Interceptor createCheckAuthInterceptor(){
    	return new WebServiceInterceptor();
    }
    

    차단 기 를 추가 한 후 인 터 페 이 스 를 방문 합 니 다. 콘 솔 인쇄 정 보 는 다음 과 같 습 니 다.
    content-type:text/xml;charset=utf-8
    cache-control:no-cache
    pragma:no-cache
    user-agent:Java/1.8.0_181
    host:127.0.0.1:8011
    accept:text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
    connection:keep-alive
    content-length:651
    ===================================
           
    nodename:auth_rtime;textContent:1568958856730
       
    nodename:auth_sign;textContent:L69yyZXc6CwjXgpw5vE89AZFxTvGu6Rqr/62UbNFfHk=
           
    nodename:name;textContent:  
    

    프로젝트 에서 헤더 정 보 를 얻 는 문제 에 부 딪 혀 기록 합 니 다.

    좋은 웹페이지 즐겨찾기