本文参考自:J2EE Web服务开发系列之十二: 实现安全的AXIS Web服务,第1部分
package com.hellking.study.webservice; public class PersonalTaxService { final double base = 3500;// 所得税上缴基数。 public double getTax(double salary) { double tax_salary = salary - base; double tax = 0.0d;// 计算后的所得税。 if (0 > tax_salary) tax = 0; else if (0 < tax_salary && tax_salary <= 1500) tax = tax_salary * 0.03 - 0; else if (1500 < tax_salary && tax_salary <= 4500) tax = tax_salary * 0.10 - 25; return tax; } }
布署web 服务
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="PersonalTaxService" provider="java:RPC"> <parameter name="allowedMethods" value="*"/> <parameter name="className" value="com.hellking.study.webservice.PersonalTaxService"/> </service> </deployment>
执行命令:
java -classpath %CLASSPATH% org.apache.axis.client.AdminClient -l http://localhost:8080/axis/services/PersonalTaxService D:/workspace-java/axis1/web/WEB-INF/deploy_auth_client_cert.wsdd
使web服务变为SSL的安全加密方式访问:
1、把以下命令粘贴到notepad里头,并保存为“gen-cer-store.bat”
rem CN:是指客户名称(first and last name) rem OU:组织单位(organizational unit) rem OU:组织(organizational ) rem L:城市或地点(City or Locality) rem S:省份(State or Province) rem C:两个字符的国家编码(two-letter country code) set SERVER_DN="CN=linzq-notebook, OU=ec, O=ec, L=BEIJINGC, S=BEIJING, C=CN" set CLIENT_DN="CN=linzq-notebook-client, OU=ec, O=ec, L=BEIJING, S=BEIJING, C=CN" set PWD=123456 set VALIDITY=-validity 3650 set KS_PASS=-storepass %PWD% set KEYINFO=-keyalg RSA rem 创建服务器端的证书库(证书库包含密钥、公钥及实体信息) keytool -genkey -alias Server -dname %SERVER_DN% %KS_PASS% -keystore server.keystore %KEYINFO% -keypass %PWD% %VALIDITY% rem 从服务器端的密匙库中输出服务器端的RSA证书,用这个RSA证书生成客户端的信任库 keytool -export -alias Server -file server_key.cer %KS_PASS% -keystore server.keystore rem 将服务器端的RSA证书导入到客户端的信任库中 keytool -import -file server_key.cer %KS_PASS% -keystore client.truststore -alias serverkey -noprompt rem 创建客户端的证书库(证书库包含密钥、公钥及实体信息),并指定库类型为:PKCS12 keytool -genkey -alias Client -dname %CLIENT_DN% %KS_PASS% -storetype PKCS12 -keystore custom.p12 %KEYINFO% -keypass %PWD% %VALIDITY% rem 从客户端的密匙库中输出客户端的RSA证书,用这个RSA证书生成服务器端的信任库 keytool -export -alias Client -file client_key.cer %KS_PASS% -keystore custom.p12 -storetype PKCS12 -rfc rem 将客户端的RSA证书导入到服务器端的信任库中 keytool -import -file client_key.cer %KS_PASS% -keystore server.truststore -alias clientkey -noprompt keytool -list -v -keystore server.keystore %KS_PASS% keytool -list -v -keystore client.truststore %KS_PASS% pause
2、编辑TOMCAT_HOME/conf/server.xml
<Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" keystoreFile="server.keystore" keystorePass="123456" truststoreFile="server.truststore" truststorePass="123456" clientAuth="true" sslProtocol="TLS" />
clientAuth="true" 表示服务端SSL椎栈要求在客户端连接前提供一个有效的证书链(验证客户端证书)
3、强制访问的地址使用SSL加密方式访问, 编辑/axis1/web/WEB-INF/web.xml,在最后添加上:
<security-constraint> <!-- Authorization setting for SSL --> <web-resource-collection> <web-resource-name>SSL</web-resource-name> <url-pattern>/services/PersonalTaxService</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> <login-config> <!-- Authorization setting for SSL --> <auth-method>CLIENT-CERT</auth-method> <realm-name>Client Cert Users-only Area</realm-name> </login-config>
最后编写客户端代码:
package com.hellking.study.webservice; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; /** * 调用需要验证的Web服务 */ public class AuthClient { static final double salary = 50000; public static void main(String[] args) { try { // 服务端的url,需要根据情况更改。 String endpointURL = "https://localhost:8443/axis/services/PersonalTaxService";// Web服务端点地址 Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(endpointURL)); call.setOperationName(new QName("PersonalTaxService", "getTax"));// 设置操作的名称。 // 由于需要使用SSL认证,因此把用户名和密码注释掉了。 //call.getMessageContext().setUsername("hellking");// 设置用户名。 //call.getMessageContext().setPassword("simplewebservices");// 设置密码 call.addParameter("op1", XMLType.XSD_DOUBLE, ParameterMode.IN);// 参数的类型 call.setReturnType(XMLType.XSD_DOUBLE);// 返回的数据类型 Double ret = (Double) call.invoke(new Object[] { new Double(salary) });// 执行调用 System.out.println("使用HTTP协议来作为Web服务的传输协议!"); System.out.println("已经成功调用。请参看服务端的输出!"); System.out.println("输入工资" + salary + "元,应交个人所得税:" + ret); } catch (Exception e) { e.printStackTrace(); } } }
测试:
1、访问:http://localhost:8080/axis/services,将列出web服务列表
点击PersonalTaxService 的wsdl链接地址,验证一下会不会提示需要导入客户端证进行认证。
那么当前需要从Firefox中导入客户端证书库。且这个证书库格式:PKCS
从网页访问的效果:
对在eclipse中运行“run configrations ”需要输入的参数为:
-Djavax.net.ssl.keyStore=D:/apache-tomcat-5.5.34/client.keystore -Djavax.net.ssl.keyStorePassword=123456 -Djavax.net.ssl.trustStore=D:/apache-tomcat-5.5.34/client.truststore
在命令行中运行就用以下命令:
java -cp %AXISCLASSPATH% -Djavax.net.ssl.keyStore=D:/apache-tomcat-5.5.34/client.keystore -Djavax.net.ssl.keyStorePassword=123456 -Djavax.net.ssl.trustStore=D:/apache-tomcat-5.5.34/client.truststore com.hellking.study.webservice.AuthClient
或者直接使用代码形式添加证书及密码:
package com.hellking.study.webservice; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; /** * 调用需要验证的Web服务 */ public class AuthClient { static final double salary = 50000; public static void main(String[] args) { try { // 配置证书地址及密码 String keystorePassword="123456",truststorePassword="123456"; String keystoreFile = "D:/apache-tomcat-5.5.34/client.keystore"; String truststoreFile = "D:/apache-tomcat-5.5.34/client.truststore"; System.setProperty("javax.net.ssl.keyStore", keystoreFile); System.setProperty("javax.net.ssl.keyStorePassword",keystorePassword); System.setProperty("javax.net.ssl.trustStore", truststoreFile); System.setProperty("javax.net.ssl.trustStorePassword",truststorePassword); // 服务端的url,需要根据情况更改。 String endpointURL = "https://localhost:8443/axis/services/PersonalTaxService";// Web服务端点地址 Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(endpointURL)); call.setOperationName(new QName("PersonalTaxService", "getTax"));// 设置操作的名称。 // 由于需要使用SSL认证,因此把用户名和密码注释掉了。 //call.getMessageContext().setUsername("hellking");// 设置用户名。 //call.getMessageContext().setPassword("simplewebservices");// 设置密码 call.addParameter("op1", XMLType.XSD_DOUBLE, ParameterMode.IN);// 参数的类型 call.setReturnType(XMLType.XSD_DOUBLE);// 返回的数据类型 Double ret = (Double) call.invoke(new Object[] { new Double(salary) });// 执行调用 System.out.println("使用HTTP协议来作为Web服务的传输协议!"); System.out.println("已经成功调用。请参看服务端的输出!"); System.out.println("输入工资" + salary + "元,应交个人所得税:" + ret); } catch (Exception e) { e.printStackTrace(); } } }
df
相关推荐
标题中的"axis2-1.8.0apache-cxf-3.4.4.rar"是一个压缩包文件,其中包含了两个重要的开源项目:Apache Axis2版本1.8.0和Apache CXF版本3.4.4。这两个项目都是用于构建和部署Web服务的重要工具,主要应用于Java开发...
标题中的"axis2-eclipse-codegen-plugin-1.6.2和axis2-eclipse-service-plugin-1.6.2"指的是两个与Apache Axis2相关的Eclipse插件:Axis2代码生成插件和Axis2服务插件,它们是版本1.6.2的。Apache Axis2是一个流行的...
标题中的"axis2-idea-plugin-1.7.9.zip_axis2_axis2-idea-plugin_idea导入axis2_"提到了几个关键元素,分别是"axis2"、"idea-plugin"和"idea导入axis2",这暗示了这个压缩包是用于在IntelliJ IDEA这款集成开发环境...
标题中的"axis2-eclipse-codegen-plugin-1.6.2.zip"和"axis2-eclipse-service-plugin-1.6.2.zip"是两个与Apache Axis2相关的Eclipse插件,用于简化Web服务的开发过程。Apache Axis2是Java平台上一个成熟的Web服务...
axis2-eclipse-service-archiver-wizard.zip
axis web service client 源码
共四个文件,都是最先版的,希望可以帮助大家。axis2-eclipse-service-archiver-wizard和axis2-eclipse-codegen-wizard和axis2-1.6.1-bin和axis2-1.6.1-war
目前axis2最高版本是2.0以上的版本,但是eclipse和myeclipse都不支持,无奈只能使用低版本的插件1.6.3;经实验,可以安装成功;...axis2-eclipse-service-plugin-1.6.3.zip axis2-eclipse-codegen-plugin-1.6.3.zip
标题中的"axis.jar"和"axis-saaj-1.4.jar"是两个重要的Java库文件,它们在Web服务开发中扮演着核心角色。本文将详细介绍这两个库以及它们与Web服务的关系。 首先,让我们深入了解Axis。Axis是Apache软件基金会的一...
标题中的"axis2-eclipse-service-plugin-1.7.4.zip"指的是Axis2 Eclipse服务插件的1.7.4版本的归档文件,它是一个专门为Eclipse集成开发环境(IDE)设计的扩展。这个插件允许开发者在Eclipse中方便地创建、部署和...
axis2 webservice client端jar包 -->axis2-kernel-1.6.1.jar -->axis2-adb-1.6.1.jar -->axiom-api-1.2.12.jar -->commons-logging-1.1.1.jar -->wsdl4j-1.6.2.jar -->XmlSchema-1.4.7.jar -->axiom-impl-...
2. 安全性:AXIS支持WS-Security规范,可以实现安全的Web服务通信,如数字签名、消息加密等。 3. 互操作性:由于AXIS遵循WS-I(Web服务互操作性)标准,它能与不同平台和语言的Web服务无缝对接。 通过上述内容,你...
标题“axis2-eclipse-service-plugin-1.5.4”指的是Axis2 Eclipse Service Plugin的1.5.4版本。这是一个专门为Eclipse IDE设计的插件,用于帮助开发人员在Eclipse环境中创建、部署和管理基于Apache Axis2的Web服务。...
Eclipse Codegen Plugin 和 Service Plugin 是Axis2为Eclipse集成开发环境提供的两个重要工具,它们极大地简化了基于Axis2的Web服务开发过程。 **Apache Axis2 Eclipse Codegen Plugin** 这个插件主要用于自动生成...
"axis2-idea-plugin-1.7.8" 是一个专为IntelliJ IDEA设计的插件,主要用于提升开发者在处理Axis2 Web服务时的效率和便利性。Axis2是Apache软件基金会开发的一个开放源代码Web服务框架,它提供了一种高效、灵活的方式...
Axis是Java平台上流行的Web服务实现,它提供了SOAP(Simple Object Access Protocol)处理和WSDL(Web Services Description Language)生成的能力。通过Axis,开发者可以轻松地将Java类转换为Web服务,或者调用...
axis2-eclipse-codegen-plugin-1.6.0和axis2-eclipse-service-plugin-1.6.0有关jar包下载,解压后直接将这两个jar包放到eclips下的plugins目录下,重启eclipse即可
3. **下载并解压Axis**:从Apache官方站点下载最新版本的Axis,将其解压到指定目录,例如`Axis_UNZIP_PATH\Axis-version\webapps`。 4. **部署Axis到Tomcat**:将解压后的Axis目录复制到Tomcat的webapps目录下,即`...
axis2 eclipse 插件! axis2-eclipse-codegen-plugin-1.6.1.zip axis2-eclipse-service-plugin-1.6.1.zip 附件已经把两个插件压缩在一起了,只需一次下载