使用 SpringBoot 集成 WebService [需要身份验证]
使用 JDK 自带的 wsimport 工具生成实体类
1.1 创建身份验证文件(用于 Webservice 身份验证—auth.txt
# 格式
http://账号:密码@wsdl地址
# 案例
http://userName:password@192.168.1.3/ReportServer/reportservice2010.asmx?wsdl1.2 创建文件夹(用于保存生成的WebService实体类—wsdl

1.3 在 JDK 安装目录下的 bin 目录下,输入 cmd 进入黑窗口

1.4 输入命令,生成客户端实体类
wsimport -s 实体类保存文件夹路径 -p 包路径 -encoding utf-8 -keep -verbose -Xauthfile 验权文件路径 wsdl地址
# 案例
wsimport -s d:\wsdl -p cn.lqdev.webservice -encoding utf-8 -keep -verbose -Xauthfile d:\auth.txt http://192.168.x.x/ReportServer/reportservice2010.asmx?wsdl
将实体类导入到项目中

SOPA方式
需要依赖
<!--WebService 所需依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>创建身份验证类
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
/**
* <p>描述: [返回鉴权信息] </p>
* <p>创建时间: 2020/4/7 </p>
*
* @author <a href="mailto:chenys@highzap.com" rel="nofollow">Chenys</a>
* @version v1.0
*/
@Component
public class SsrsAuthenticator extends Authenticator {
@Value("${report.ssrs.confirm.userName}")
private String ssrsUserName;
@Value("${report.ssrs.confirm.password}")
private String ssrsPassword;
/**
* 描述: [重写父类方法 返回鉴权信息]
*
* @param
* @return
* @throws
* @date 2020/4/7 16:29
*/
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(ssrsUserName, ssrsPassword.toCharArray());
}
}创建配置类(返回SOAP接口的实现类
import com.highzap.report.webservice.reportingservice.ReportingService2010;
import com.highzap.report.webservice.reportingservice.ReportingService2010Soap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.net.Authenticator;
import java.net.MalformedURLException;
import java.net.URL;
/**
* <p>描述: [ReportingService 配置类] </p>
* <p>创建时间: 2020/4/2 </p>
*
* @author <a href="mailto:chenys@highzap.com" rel="nofollow">Chenys</a>
* @version v1.0
*/
@Configuration
public class SsrsConfig {
@Autowired
private SsrsAuthenticator ssrsAuthenticator;
@Value("${report.ssrs.wsdl}")
private String wsdl;
/**
* 描述: [获取一个实例对象]
*
* @param
* @return reportingService2010Soap
* @date 2020/4/3 14:55
*/
@Bean
public ReportingService2010Soap getReportingService2010Soap() throws MalformedURLException {
// SOAP鉴权
Authenticator.setDefault(ssrsAuthenticator);
// 返回一个SOAP接口实现类
return new ReportingService2010(new URL(wsdl)).getReportingService2010Soap();
}
}CXF 方式(两种方式效果一样
需要依赖
<!--WebService 所需依赖-->
<dependency> </dependency>
创建配置类(返回SOAP接口的实现类
/**
* <p>描述: [ReportingService 配置类] </p>
* <p>创建时间: 2020/4/2 </p>
*
* @author <a href="mailto:chenys@highzap.com" rel="nofollow">Chenys</a>
* @version v1.0
*/
@Configuration
public class SsrsConfig { @Value("${report.ssrs.wsdl}")
private String wsdl; /**
* 描述: [获取一个实例对象]
*
* @param
* @return reportingService2010Soap
* @date 2020/4/3 14:55
*/
@Bean
public ReportingService2010Soap getReportingService2010Soap() throws MalformedURLException {
// 代理工厂
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
// 认证用户、密码
jaxWsProxyFactoryBean.setUsername("userName");
jaxWsProxyFactoryBean.setPassword("password");
// 设置代理地址
jaxWsProxyFactoryBean.setAddress(wsdl);
// 设置接口类型
jaxWsProxyFactoryBean.setServiceClass(ReportingService2010Soap.class);
// 创建一个代理接口实现
ReportingService2010Soap us = (ReportingService2010Soap) jaxWsProxyFactoryBean.create();
return us;
}
}
调用
package com.highzap.report.proxy.ssrs;
import com.highzap.report.dto.ssrs.GetReportDTO;
import com.highzap.report.dto.ssrs.UploadReportDTO;
import com.highzap.report.exception.ReportBusinessException;
import com.highzap.report.webservice.reportingservice.ArrayOfCatalogItem;
import com.highzap.report.webservice.reportingservice.ArrayOfProperty;
import com.highzap.report.webservice.reportingservice.CatalogItem;
import com.highzap.report.webservice.reportingservice.ReportingService2010Soap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* <p>描述: [封装 ReportingService 官方代理类] </p>
* <p>创建时间: 2020/4/2 </p>
*
* @author <a href="mailto:chenys@highzap.com" rel="nofollow">Chenys</a>
* @version v1.0
*/
@Component
public class SsrsProxy {
@Autowired
private ReportingService2010Soap reportingService2010Soap;
private String notExist = "Unknown";
/**
* 描述: [报表上传]
*
* @param uploadReportDTO [上传报表方法 参数封装]
* @return
* @date 2020/4/2 15:02
*/
public void uploadReport(UploadReportDTO uploadReportDTO) {
reportingService2010Soap
.createCatalogItem(
uploadReportDTO.getItemType(),
uploadReportDTO.getName(),
uploadReportDTO.getParent(),
uploadReportDTO.getOverwrite(),
uploadReportDTO.getDefinition(),
uploadReportDTO.getProperties(),
uploadReportDTO.getItemInfo(),
uploadReportDTO.getWarning());
}
}
常见问题
报错:401-鉴权失败(Authentication failure)—代码没有问题,部分环境运行报错;
原因:JDK放置在了 C盘,导致JDK的安全策略,会禁止proxy使用用户名密码这种鉴权方式;
解决办法:修改JDK路径下的文件(jdk1.8.0_111/jre/lib/net.properties)
报错信息:缺少xxxxImpl类
报错原因:JDK版本问题
解决办法:切换JDK版本为 JDK1.8
使用 SpringBoot 集成 WebService [需要身份验证]的更多相关文章
- WebService 之 身份验证
在项目开发,我们经常会使用WebService,但在使用WebService时我们经常会考虑到了WebService是安全问题,很容易想到通过一组用户名与密码来防止非法用户的调用 . 一.Networ ...
- 在surging 微服务引擎下如何搭建webservice和身份验证
一.前言 现实生产中,有一些比较老的系统对外提供的接口都是WebService,尤其是比较老的系统都是围绕ESB进行搭建,而对外提供就需要WebService ,为了更好完善其解决方案,故集成了web ...
- 调用webservice进行身份验证
因为同事说在调用webservice的时候会弹出身份验证的窗口,直接调用会返回401,原因是站点部署的时候设置了身份验证(账号名称自己配置).因而在调用的时候需要加入身份验证的凭证. 至于如何获取身份 ...
- 为WebService添加身份验证的两种方法
方法一:SoapHeader 辅助类:MySoapHeader //SoapHeader 添加引用 using System.Web.Services.Protocols; #region 配置登录标 ...
- springboot集成shiro实现身份认证
github地址:https://github.com/peterowang/shiro pom文件 <dependencies> <dependency> <group ...
- SpringBoot 使用jwt进行身份验证
这里只供参考,比较使用jwt方式进行身份验证感觉不好,最不行的就是不能退出 登陆时设定多长过期时间,只能等这个时间过了以后才算退出,服务端只能验证请求过来的token是否通过验证 Code: /** ...
- SpringBoot集成JWT实现token验证
原文:https://www.jianshu.com/p/e88d3f8151db JWT官网: https://jwt.io/ JWT(Java版)的github地址:https://github. ...
- ASP.NET协作应用集成到trsids身份验证服务器的开发流程
开发Actor协同模块: (参考TRSIDS4.0 协作应用集成手册[asp.net]) ASP.Net协作应用集成到IDS之前,需要开发Actor类实现协作应用回调接口中定义的本地登录.退出.用户信 ...
- SpringBoot 通过token进行身份验证,存储redis
代码: public interface TokenManager { /** * 创建token * @param userInfo * @return */ String getToken(Use ...
- 在PHP应用中简化OAuth2.0身份验证集成:OAuth 2.0 Client
在PHP应用中简化OAuth2.0身份验证集成:OAuth 2.0 Client 阅读目录 验证代码流程 Refreshing a Token Built-In Providers 这个包能够让你 ...
随机推荐
- SpringBoot应用调用Linkis进行任务调度执行SQl;进行数据质量分析
基于Linkis的Rest-API调用任务 官网示例:"https://linkis.apache.org/zh-CN/docs/1.3.2/api/linkis-task-operator ...
- Proxmox VE安装CentOS 8.3
相信玩服务器/VPS的对CentOS一定不陌生,CentOS 是一个基于Red Hat Linux 提供的可自由使用源代码的企业级Linux发行版本.因为是免费的,现在很多WEB服务器和VPS都经常使 ...
- linux(centos)配置ipv6网卡
1.ipv6网卡配置文件和ipv4在同一个网卡配置文件中 vim /etc/sysconfig/network-scripts/ifcfg-eth0 设置好之后重启网卡生效 2.测试
- BUUCTF---basic RSA
题目 给出一个RSA加密的密文,阐述了RSA,主要就是代码实现解密 代码 点击查看代码 import gmpy2 from Crypto.Util.number import * from binas ...
- restTemplate 使用问题小记
使用restTemplate在后端进行接口转发, 期间包括文件上传, 预览和下载. 还有一些字符串或css/js文件的读取. 1. 文件上传 参考: RestTemplate转发MultipartFi ...
- .net WorkFlow 流程设计
WikeFlow官网:www.wikesoft.com WikeFlow学习版演示地址:workflow.wikesoft.com WikeFlow学习版源代码下载:https://gitee.com ...
- 修显示器led屏幕能亮但是显示异常
用电吹风热风大风 对着显示器的 ' led 区域 ' 吹十分钟 吹显示器线插口 电源线 插口 机箱 断电吹 // 温度挺高 还得吹显卡接口 线也要换新的 插口需要用线的接口 打磨金属 ...
- 使用Python计算并可视化长直导线产生的磁场
引言 大家好,今天我们来探讨一个有趣的话题--长直导线产生的磁场,并通过 Python 来进行计算和可视化.你可能会问,为什么要研究这个问题?其实,这是电磁学中的一个基础问题,理解了它,我们就能更好地 ...
- python之导入(import)\引用自己写的py文件的方法
有时候出现这种情况,通过A脚本取数据,然后B数据去处理数据,如果A.B两个脚本的能力用同一个脚本去书写会显示的过于臃肿不易优化 这就需要根据不同的功能拆分然后到互相调用 可以用import的方式实现 ...
- TCP连接(Netty)
启动类增加 public static void main(String[] args) { SpringApplication application = new SpringApplication ...