cxf webservice + srping 整合 + 限制IP地址 + properties配置文
发布时间:2020-12-16 23:26:27 所属栏目:安全 来源:网络整理
导读:首先说 cxf 与 spring 整合: 接口: package org.sttc.service;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;@WebServicepublic interface IMyService {@WebResult(name="addResult")public int add(@WebParam(name=
首先说 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); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |