WebService:实现添加Header并完成验证的服务

1. 声明

当前内容主要为本人记录使用webservice使用携带header的请求方式

主要内容为:

  1. 创建携带参数调用的webservice方法
  2. 创建携带header认证的方法
  3. 使用soapui方式测试请求
  4. 使用wsimport方式完成携带header验证的请求

2. 创建携带参数的webservice方法

创建实体类User

@XmlRootElement
public class User {
	private String username;
	private Integer id;
	// 省略get\set方法
}

创建响应实体类Response

public class Response {
	private Boolean status;
	private Object data;
	private String msg;
	// 省略无参有参getset方法

}

在webservice接口中添加一个携带参数的方法

@WebResult
@WebMethod(action = "addUser")
Response addUser(User user);

在webservice的实现类中实现该方法

@Override
public Response addUser(User user) {
	// TODO Auto-generated method stub
	userDB.put(user.getId(), user);
	Response response = new Response();
	response.setStatus(true);
	return response;
}

此时默认传递的参数会自动转换为User
下列为使用soapui生成的请求模板:
在这里插入图片描述
这个arg0虽然不好看,但是不影响请求,可以修改如下

1. 在User前面添加如下

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "user", propOrder = {
    "username",
    "id"
})
public class User {
}

2.在方法前面添加如下

@WebResult
@WebMethod(action = "addUser")
Response addUser(@WebParam( name = "user") User user);

此时使用soapui的结果:
在这里插入图片描述

3. 创建携带Header认证的webservice方法

==创建需要认证的实体类:UserNameAndPassword ==

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "UserNameAndPassword", propOrder = {
    "username",
    "password"
})
public class UserNameAndPassword {
	private String username;
	private String password;
	// 省略getset方法
}

在webservice接口中创建认证方法

@WebResult
@WebMethod(action = "getUserById")
Response getUserById(
		@WebParam(header = true, name = "UserNameAndPassword") UserNameAndPassword userNameAndPassword,
		@WebParam(name = "id")
		 Integer id);

在webservice接口的实现类中实现该认证方法

@Override
public Response getUserById(UserNameAndPassword userNameAndPassword, Integer id) {
	if(!validate(userNameAndPassword)) {
		return new Response(false,null,"登录失败");
	}
	User user = userDB.get(id);
	return new Response(true,user,null);
}

private boolean validate(UserNameAndPassword userNameAndPassword) {
	if(userNameAndPassword==null) {
		return false;
	}
	String username = userNameAndPassword.getUsername();
	if(!StringUtils.hasText(username)) {
		return false;
	}
	return "admin".equals(username);
}

这里默认认为用户名为admin的就是登陆成功的,下面是soapui生成的请求模板
在这里插入图片描述

4. 使用wsimport生成java文件并测试

1.生成java文件

wsimport -keep http://localhost:8081/show?wsdl

2.将java文件导入到项目中

3.编写测试

public class Test {
	public static void main(String[] args) {
		MyServiceImplService myServiceImplService = new MyServiceImplService();
		
		MyService myService = myServiceImplService.getMyServiceImplPort();
		User user = new User();
		user.setId(4);
		user.setUsername("test");
		Response addUserResponse = myService.addUser(user);
		System.out.println("添加数据结果:"+addUserResponse.isStatus());
		GetUserById getUserById = new GetUserById();
		getUserById.setId(4);
		UserNameAndPassword userNameAndPassword = new UserNameAndPassword();
		// 
		//userNameAndPassword.setUsername("admin");
		//userNameAndPassword.setPassword("");
		GetUserByIdResponse response = myService.getUserById(getUserById, userNameAndPassword);
		Response getResponse =response.getReturn();
		if(!getResponse.isStatus()) {
			System.out.println("获取数据失败:"+getResponse.getMsg());
		}else {
			User userById =  (User)getResponse.getData();
			System.out.println(userById.getId()+":"+userById.getUsername());
		}
		
	}
}

1. 不符合要求的请求结果(未设置username为admin)
在这里插入图片描述
2. 符合要求的请求结果:
在这里插入图片描述

5. 总结

1. 携带Header请求认证webservice的方式如下:

 @WebMethod(action = "getUserById")
    @WebResult(name = "getUserByIdResponse", targetNamespace = "http://service.demo.webservice.springboot.hy.com/", partName = "result")
    @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
    @Action(input = "getUserById", output = "http://service.demo.webservice.springboot.hy.com/MyService/getUserByIdResponse")
    public GetUserByIdResponse getUserById(
        @WebParam(name = "getUserById", targetNamespace = "http://service.demo.webservice.springboot.hy.com/", partName = "parameters")
        GetUserById parameters,
        @WebParam(name = "UserNameAndPassword", targetNamespace = "http://service.demo.webservice.springboot.hy.com/", header = true, partName = "UserNameAndPassword")
        UserNameAndPassword userNameAndPassword);

在需要header认证的地方添加一个对应的类型参数,然后添加注解 @WebParam,并设置header = true,然后设置partName为该类的@XmlType中的name属性一致

2. 可以在使用的时候使用soapui方式测试当前的webservice接口,查看需要的参数

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值