微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cxf webservice + srping 整合 + 限制IP地址 + properties配置文件

首先说 cxf 与 spring 整合:

接口:

package org.sttc.service;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService
public interface IMyService {
	
	
	@WebResult(name="addResult")
	public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);
	
	public int minus(@WebParam(name="a")int a,@WebParam(name="b")int b);

实现类:

package org.sttc.service;

import javax.jws.WebService;

@WebService(endpointInterface="org.sttc.service.IMyService")
public class MyServiceImpl implements IMyService{

	@Override
	public int add(int a,int b) {
		System.out.println(a+"+"+b+"="+(a+b));
		return a+b;
	}

	@Override
	public int minus(int a,int b) {
		System.out.println(a+"-"+b+"="+(a-b));
		return a-b;
	}
	

application-server.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:lang="http://www.springframework.org/schema/lang"  
    xmlns:jaxws="http://cxf.apache.org/jaxws"  
    xsi:schemaLocation="  
         http://www.springframework.org/schema/beans   
         http://www.springframework.org/schema/beans/spring-beans.xsd  
         http://www.springframework.org/schema/lang   
         http://www.springframework.org/schema/lang/spring-lang.xsd  
         http://cxf.apache.org/jaxws        
         http://cxf.apache.org/schemas/jaxws.xsd ">


    <import resource="classpath:meta-inf/cxf/cxf.xml"/>   
	<import resource="classpath:meta-inf/cxf/cxf-extension-soap.xml"/>  
	<import resource="classpath:meta-inf/cxf/cxf-servlet.xml"/>  
    
	
	
          <bean id="serviceImpl" class="com.yx.springInter.ServiceImpl">
          
          </bean>
          
        <jaxws:endpoint 
          		 implementor="#serviceImpl" address="/hello">  
          <!-- webservice -->
    </jaxws:endpoint>  
    
</beans>

web.xml:

<span style="white-space:pre">	</span><listener>
	    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
<span style="white-space:pre">	</span>//把新写的applicationContext-server.xml引入进来
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml
					 classpath:applicationContext-server.xml
		</param-value>
	</context-param>
<span style="white-space:pre">	</span>//加一个拦截器的监听
<span style="white-space:pre">	<listener>
<span style="white-space:pre">		</span><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
<span style="white-space:pre">	</span></listener></span>
- <!--  配置webservice -->
  
- <servlet>
  <servlet-name>CXFServlet</servlet-name> 
  <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
  <load-on-startup>2</load-on-startup> 
  </servlet>
- <servlet-mapping>
  <servlet-name>CXFServlet</servlet-name> 
  <url-pattern>/world/*</url-pattern> 
  </servlet-mapping>
拦截器类:

</pre><p><pre name="code" class="java">package com.yx.filter;

import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import javassist.bytecode.Descriptor.Iterator;

import javax.servlet.FilterChain;
import javax.servlet.servletexception;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;




public class ServiceFilter extends StrutsPrepareAndExecuteFilter{
	public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain)throws IOException,servletexception{
		
		HttpServletRequest request = (HttpServletRequest) req; 
		<pre name="code" class="java">if(URI.contains("hello")){

String reqURI= request.getRequestURI();if(URI.contains("hello")){chain.doFilter(req,res);}else{super.doFilter(req,res,chain);}}}

 
 
输入http://localhost:8080/项目名/world/hello?wsdl 出现一个wsdl文件,成功。 

然后开始限制IP地址,网上的文章跟我写的拦截器不同,着实困扰了我好几天,原来,原来只要在拦截器里加一行代码判断就行了,我就特么擦啦。

if(URI.contains("hello") && request.getRemoteAddr("192.168.*.***")){


如果做项目的话,建议做一个IP地址的配置文件方便修改

properties配置文件

URI=/项目名/ws/hello
add=192.168.1.888

拦截器类:

package com.yx.filter;

import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import javassist.bytecode.Descriptor.Iterator;

import javax.servlet.FilterChain;
import javax.servlet.servletexception;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;




public class ServiceFilter extends StrutsPrepareAndExecuteFilter{
	public void doFilter(ServletRequest req,servletexception{
		Properties pros = new Properties();
		String URI = "";<span style="white-space:pre">	</span>
		String add = "";<span style="white-space:pre">	</span>//客户端地址
		InputStream in = getClass().getResourceAsstream("/webservice.properties");//配置文件的名字:webservice.properties
		pros.load(in);  <span style="white-space:pre">	</span>//加载配置文件
		in.close();
		if(pros.containsKey("URI")){<span style="white-space:pre">	</span>//配置文件的key 等于 URI 的话
			URI = pros.getProperty("URI");<span style="white-space:pre">	</span>//取到配置文件的value

		}
		if(pros.containsKey("add")){
			add = pros.getProperty("add");
			
		}
		
		HttpServletRequest request = (HttpServletRequest) req; 
		String reqAdd = request.getRemoteAddr();
		String reqURI= request.getRequestURI();
			
		if(URI.contains(reqURI) && add.equals(reqAdd)){
				chain.doFilter(req,res);
			}else{
				super.doFilter(req,chain);
			}
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐