java - 尝试调用 Web 服务调用时访问被拒绝

标签 java web-services session-cookies

我正在尝试使用为外部人员开发的网络服务中的一些方法。当我调用他们时,我犯了这个错误:

Access is denied.
org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:606)
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1741)
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2898)
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:302)
org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
org.apache.axis.client.Call.invokeEngine(Call.java:2784)
org.apache.axis.client.Call.invoke(Call.java:2767)
org.apache.axis.client.Call.invoke(Call.java:2443)
org.apache.axis.client.Call.invoke(Call.java:2366)
org.apache.axis.client.Call.invoke(Call.java:1812)
Services.Web.CCIS.BasicHttpBinding_PublicApiServiceStub.getAccountInfo(BasicHttpBinding_PublicApiServiceStub.java:1199)
es.uniway.action.login.LoginAction.execute(LoginAction.java:163)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:255)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:510)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)


nota La traza completa de la causa de este error se encuentra en los archivos de diario de Apache Tomcat/7.0.12.

为什么?这是我的代码:

public String execute() throws Exception {
    System.out.println("rrrrrr");

    // TODO Auto-generated method stub
    logIn=false;
    java.net.URL portAddress=null;
    String endpoint="";
    session = ActionContext.getContext().getSession();



    System.out.println("ffffffffffffffffff");
    System.out.println("La password es:"+getPassword());

    PublicApiServiceProxy publicPort=null;

    PublicApiService_Service publicService=null;

 //java.net.URL portAddressCloud = new java.net.URL("http://localhost:8080/webServiceCloud2/services/WscloudImpl");
 java.net.URL portAddressCloud = new java.net.URL("http://localhost:8080/webServiceCloud2_old/services/WscloudImpl");

    WscloudImplServiceLocator wscloudServiceLocator = new WscloudImplServiceLocator();
      //WscloudImpl wscloud = wscloudServiceLocator.getWscloudImpl(portAddress);

      WscloudImplSoapBindingStub bsStubcloud=null;
      bsStubcloud=(WscloudImplSoapBindingStub) wscloudServiceLocator.getWscloudImpl(portAddressCloud);



    String url = (servletRequest.getRequestURL()).toString();




        endpoint="http://xxx.xxxxx.es/CCIS/Services/PublicApiService.wsdl";

        portAddress = new java.net.URL("http://://xxx.xxxxx.es/CCIS/Services/PublicApiService.svc");








    publiApi = new PublicApiService_ServiceLocator();
    ports=publiApi.getBasicHttpBinding_PublicApiService(portAddress);

    BasicHttpBinding_PublicApiServiceStub bsStub=null;
    bsStub=(BasicHttpBinding_PublicApiServiceStub) publiApi.getBasicHttpBinding_PublicApiService(portAddress);
    session.put("login",logIn);
   // ((BasicHttpBinding_PublicApiServiceStub)bsStub).setMaintainSession(true);

    if((getUsername().length()==0)||(getPassword().length()==0)){

        addActionError("Introduce el login y la password");
        session.remove("usuario");
        session.remove("password");
        bsStub.logout();
        return "INPUT";
    }
    System.out.println(getUsername());

    ((BasicHttpBinding_PublicApiServiceStub)bsStub).setMaintainSession(true);
        logIn=bsStub.logon(getUsername(), getPassword());

        System.out.println(logIn); 


    session.put("login",logIn);


    if(logIn){

        PapiAccountInfo info=bsStub.getAccountInfo((long)0);

         PapiUserInfo[] users=bsStub.getUsers();
         System.out.println(users[0].getID());
        System.out.println("ID:"+info.getID());


        //TRespuestaValidarUsuario resultado=bsStubcloud.validarUsuario(104,86);
        TRespuestaValidarUsuario resultado=bsStubcloud.validarUsuario(users[0].getID(),info.getID());
        if(resultado.getError()==0){
            session.put("ID_CUENTA_SESSION", resultado.getDatosValidarUsuario()[0].getId_cuenta());
            session.put("ID_USUARIO_SESSION", resultado.getDatosValidarUsuario()[0].getId_usuario());
            session.put("ID_LOGIN_USUARIO_SESSION", resultado.getDatosValidarUsuario()[0].getLogin());
            session.put("ID_NIVEL_CUENTA_SESSION",resultado.getDatosValidarUsuario()[0].getNivel_cuenta());
            session.put("ID_NOMBRE_CUENTA_SESSION", resultado.getDatosValidarUsuario()[0].getNombre_cuenta());
            session.put("ID_DISTRIBUIDOR_SESSION", resultado.getDatosValidarUsuario()[0].getId_distribuidor());

            if(resultado.getDatosValidarUsuario()[0].getNivel_cuenta()==1){
                 System.out.println("Soy mayorista");
                setRole("mayorista");
            }
            if((resultado.getDatosValidarUsuario()[0].getNivel_cuenta()==2)||(resultado.getDatosValidarUsuario()[0].getNivel_cuenta()==7)){
                System.out.println("Soy distribuidor");
                setRole("distribuidor");
            }
            if(resultado.getDatosValidarUsuario()[0].getNivel_cuenta()==3){
                System.out.println("Soy cliente");
                setRole("cliente");
            }



            return "SUCCESS";
        }

         String id_login=session.get("ID_LOGIN_USUARIO_SESSION").toString();
            String id_nivel_cuenta=session.get("ID_NIVEL_CUENTA_SESSION").toString();

            TRespuestaLogo respuesta=bsStubcloud.obtener_Logo(Integer.valueOf(id_login),Integer.valueOf(id_nivel_cuenta));
            byte [] logo=respuesta.getLogo();


        request =(HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);

        //Comentar lo que me dijo Phill
      //((BindingProvider)bsTub).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);   
       Call call=bsStub._getCall();
       MessageContext ctx=call.getMessageContext();



       if(ctx==null){
           System.out.println("Holaa");
       }
       Iterator i=ctx.getAllPropertyNames();
       while(i.hasNext()){
        System.out.println(i.next());
       }    
        ctx.getProperty("Cookie");

    ctx.setUsername(getUsername());
    ctx.setPassword(getPassword());

    session.put("contexto", ctx);
    session.put("puerto", bsStub);





    }else{

        TDatosRetorno proveedor=bsStubcloud.validar_Proveedor(getUsername(),getPassword());

        if(proveedor.getError()==0){

            System.out.println("Entro como proveedor");

            session.put("ID_CUENTA_SESSION", 0);
            session.put("ID_USUARIO_SESSION", "Uniway");
            session.put("ID_LOGIN_USUARIO_SESSION", "Uniway");
            session.put("ID_NIVEL_CUENTA_SESSION",0);
            session.put("ID_NOMBRE_CUENTA_SESSION", "Uniway");
            session.put("ID_DISTRIBUIDOR_SESSION", 0);

            request =(HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);

            //Comentar lo que me dijo Phill
          //((BindingProvider)bsTub).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);   
           Call call=bsStub._getCall();
           MessageContext ctx=call.getMessageContext();



           if(ctx==null){
               System.out.println("Holaa");
           }
           Iterator i=ctx.getAllPropertyNames();
           while(i.hasNext()){
            System.out.println(i.next());
           }    
            ctx.getProperty("Cookie");

        ctx.setUsername(getUsername());
        ctx.setPassword(getPassword());

        session.put("contexto", ctx);
        session.put("puerto", bsStub);





            return "SUCCESSPROV";
        }else{
            addActionError("No existe dicho usuario en nuestra base de datos");
            session.remove("usuario");
            session.remove("login");
            return "INPUT";
        }
    }
    publicPort=new PublicApiServiceProxy(endpoint);

    String login=publicPort.getEndpoint();


    System.out.println("LogIn es: "+logIn);
    if(logIn){
        return "SUCCESS";
    }


    if(!logIn){
        addActionError("Error al logarte");
        session.remove("username");
        session.remove("password");
        bsStub.logout();
        return "INPUT";
    }
    return "SUCCESS";
}

开发此 ws 的人告诉我:GetAccountInfo 操作仅针对正常操作下未登录的请求生成“访问被拒绝”。您能否验证您是否正在使用登录操作登录,并且身份验证 cookie 是否在服务调用之间传递?我有 ((BasicHttpBinding_PublicApiServiceStub)bsStub).setMaintainSession(true);那么为什么我会犯这个错误呢?谢谢

最佳答案

我想我可能也遇到过和你类似的问题。我正在调用几个服务,其中身份验证步骤进展顺利,但我无法在其他服务上使用我的 sessionId,我总是收到访问被拒绝的消息。很长一段时间后我在 http://www.nsftools.com/stubby/ApacheAxisClientTips.htm 找到了我的解决方案 除了设置 setMaintainSession(true) 之外,我还必须执行以下操作:

CompanyServiceLocator cl = new CompanyServiceLocator();
cl.setMaintainSession(true);
CompanyServiceSoap css = cl.getCompanyServiceSoap();
((Stub)css)._setProperty(HTTPConstants.HEADER_COOKIE, "ASP.NET_SessionId="+sessionId);
css.getCountryList(); //Success after adding the HEADER_COOKIE-line. :-D

其中sessionId是我验证自己身份时返回的sessionId。您可能必须将 ASP._Net_SessionId 替换为 cookie 的名称。

关于java - 尝试调用 Web 服务调用时访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14461932/

相关文章:

c# - 如何获取网络服务的状态

javascript - 客户端开发 - 进行中/已完成指标首选项?

php - wkhtmltopdf 中的 session 问题

php - 使用 session_regenerate_id(true) 后 session 终止

java - 为什么 c 值在给定代码中重复?

java - Android Studio - 找不到目标 android-18

java - 在java中提取页面的主要部分

java - Java Axis2 WebService 中的文件路径问题

asp.net - ASP.NET Identity session cookie 的安全性如何?

java - 尝试在空对象引用上调用虚拟方法 'boolean java.util.ArrayList.add(java.lang.Object)'