UDN-企业互联网技术人气社区

板块导航

浏览  : 2115
回复  : 3

[企业互联网开放平台,互联网+建筑] NC 中用wstools生成的webservice配置不了拦截器

[复制链接]
itfen的头像 楼主
发表于 2017-5-20 09:46:59 | 显示全部楼层 |阅读模式
使用 nc.uap.mde.wstools_2.0.2.jar,发布了wsdl,选择的是 in拦截器,
但是选择了拦截器的话  就是启动不了整个项目的wsdl,即打开http://localhost/uapws/service/中连一个wsdl service都没有了。


将那段拦载器的去掉又可以启动正常使用本wsdl.
请大家帮忙看一下是什么问题,非常感谢。
我看到论坛中有这个webservice 中的配置都是没有使用验证的 ,如果谁有有关NC中的webservice 验证的资料能否传我一份?
之前用的都是直接 JAX-WS HandlerChain,现在项目需求用NC实现 。
开发环境用的是
UAP-STUDIO集成开发平台版本: 6.3.1.2
<?xml version='1.0' encoding='UTF-8'?>
<module>
        <public>
                <component name="pzoomserver">
                        <interface>nc.itf.hq.webservice.pzoom.Ipzoom</interface>
                        <implementation>nc.impl.hq.webservice.pzoom.IpzoomImpl</implementation>
                        <extension class="nc.uap.ws.deploy.OxbWSExtensionProcessor">
                                <wsdl>/nc/itf/hq/webservice/pzoom/Ipzoom.wsdl</wsdl>
                                <address>/pzoomserver</address>
<---下面这一段是in 的拦截器--->
                                <inInterceptors>
                                        <interceptor>nc.itf.hq.webservice.pzoom.AuthInterceptor</interceptor>
                                </inInterceptors>
<---end-->

                        </extension>
                </component>
        </public>
        <private>
        </private>
</module>



下面的是拦截器内容


* 服务端权限拦截器
*/
public class AuthInterceptor extends AbstractPhaseInterceptor<SoapMessage> {

        public AuthInterceptor() {
                super(Phase.PRE_INVOKE); //拦截器在调用方法之前拦截SOAP消息
        }

        // 拦截器操作
        @Override
        public void handleMessage(SoapMessage msg) throws Fault {
                System.out.println("come to auth interceptor...");
                //获取SOAP消息的所有Header
                List<Header> headers = msg.getHeaders();
               
                if(headers == null || headers.size() < 1) {
                        throw new Fault(new IllegalArgumentException("没有Header,拦截器实施拦截"));
                }
                //获取Header携带是用户和密码信息
                Header firstHeader = headers.get(0);
                Element element = (Element) firstHeader.getObject();
               
                NodeList userNameElement = element.getElementsByTagName("userName");
                NodeList passwordElement = element.getElementsByTagName("password");
               
                if (userNameElement.getLength() != 1) {
                        throw new Fault(new IllegalArgumentException("用户名格式不对"));
                }
                       
                if (passwordElement.getLength() != 1) {
                        throw new Fault(new IllegalArgumentException("用户密码格式不对"));
                }
               
                //获取元素的文本内容
                String userName = userNameElement.item(0).getTextContent();
                String password = passwordElement.item(0).getTextContent();
               
                // 实际项目中, 应该去查询数据库, 该用户名,密码是否被授权调用该webservice
                if (!userName.equals("guest") || !password.equals("123456")) {
                        throw new Fault(new IllegalArgumentException("用户名或密码不正确"));
                }
        }


发表于 2019-5-8 14:21:06 | 显示全部楼层
我也遇到了这个问题,请问LZ怎么解决呢?
使用道具 举报

回复

发表于 2019-5-8 18:20:13 | 显示全部楼层
跟了NC发布webservice的代码,这地方拦截器的类要加上无参构造函数,然后在里面调用super(Phase p)方法。就可以了
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部