web service faultString: (401)Unauthorized
web service 安全性-----Tomcat级
1.tomcat 修改tomcat-users.xml Web应用的基本认证是建立在J2EE角色和用户的基础之上,首先在Tomcat角色配置文件中增加一个角色和一个帐号。 <?xml version='1.0' encoding='utf-8'?>
2. 修改tomcat 的server.xml 打开Tomcat_Home\conf\server.xml配置文件,在GlobalNamingResources中添加以下描述: <GlobalNamingResources> 或 <!-- Global JNDI resources --> <!-- Test entry for demonstration purposes --> <!-- Editable user database that can also be used by </GlobalNamingResources> 3.修改web.xml <security-constraint> <web-resource-collection> <web-resource-name>Tax Web service </web-resource-name> <url-pattern>/services/personTaxService</url-pattern> </web-resource-collection> <auth-constraint> <role-name>axis</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>Axis Basic Authentication Area</realm-name> </login-config> <security-role> <role-name>axis</role-name> </security-role> 4.服务端 package com.service; public class PersonTaxService {
final double base=1200;//所得税上缴基数。
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 <=500) tax=tax_salary*0.05-0;
else if(500<tax_salary&&tax_salary<=2000) tax=tax_salary*0.10-25;
else tax = tax_salary*0.2;
return tax;
}
}
server-config.wsdd <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/> <service name="myService" provider="java:RPC"> <parameter name="className" value="com.service.MyService"/> <parameter name="allowedMethods" value="sayHello"/> </service> <service name="personTaxService" provider="java:RPC"> <parameter name="className" value="com.service.PersonTaxService"/> <parameter name="allowedMethods" value="getTax"/> </service> <transport name="http"> <requestFlow> <handler type="URLMapper"/> </requestFlow> </transport> </deployment> 5.客户端 package com.client; 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; public class PersonTaxClient { static final double salary=5000; public static void main(String [] args) { try { // 服务端的url,需要根据情况更改。 String endpointURL = "http://localhost:8080/AxisTest/services/personTaxService?wsdl";// Web服务端点地址 Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new java.net.URL(endpointURL) ); call.setOperationName("getTax");// 设置操作的名称。 // 由于需要认证,故需要设置调用的用户名和密码。 call.getMessageContext().setUsername("axis");// 设置用户名。 call.getMessageContext().setPassword("axis");// 设置密码 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(); } } } 如果用户名或密码出错, 则: AxisFault faultCode: {http://xml.apache.org/axis/}HTTP faultSubcode: faultString: (401)Unauthorized faultActor: faultNode: faultDetail: {}:return code: 401 <html><head><title>Apache Tomcat/5.5.25 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 401 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>This request requires HTTP authentication ().</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/5.5.25</h3></body></html> {http://xml.apache.org/axis/}HttpErrorCode:401 (401)Unauthorized at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:744) at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165) at org.apache.axis.client.Call.invokeEngine(Call.java:2784) at org.apache.axis.client.Call.invoke(Call.java:2767) at org.apache.axis.client.Call.invoke(Call.java:2443) at org.apache.axis.client.Call.invoke(Call.java:2366) at org.apache.axis.client.Call.invoke(Call.java:1812) at com.client.PersonTaxClient.main(PersonTaxClient.java:28) |