Пользовательская политика безопасности OWSM для JAX-WS, GenericFault - PullRequest
3 голосов
/ 17 марта 2010

Я попытался создать собственную безопасность и политику, как указано здесь: http://download.oracle.com/docs/cd/E15523_01/relnotes.1111/e10132/owsm.htm#CIADFGGC

когда я запускаю пользовательское утверждение клиента службы выполняется, возвращается успешно.

   public IResult execute(IContext context) throws WSMException { 
        try { 
            System.out.println("public execute");
            IAssertionBindings bindings = 
                ((SimpleAssertion)(this.assertion)).getBindings(); 
            IConfig config = bindings.getConfigs().get(0); 
            IPropertySet propertyset = config.getPropertySets().get(0); 
            String valid_ips = 
                propertyset.getPropertyByName("valid_ips").getValue(); 
            String ipAddr = ((IMessageContext)context).getRemoteAddr(); 
            IResult result = new Result();
            System.out.println("valid_ips  "+valid_ips);
            if (valid_ips != null && valid_ips.trim().length() > 0) { 
                String[] valid_ips_array = valid_ips.split(","); 
                boolean isPresent = false; 
                for (String valid_ip : valid_ips_array) { 
                    if (ipAddr.equals(valid_ip.trim())) { 
                        isPresent = true; 
                    } 
                } 
                System.out.println("isPresent  "+isPresent);
                if (isPresent) { 
                    result.setStatus(IResult.SUCCEEDED); 
                } else { 
                  result.setStatus(IResult.FAILED); 
                  result.setFault(new WSMException(WSMException.FAULT_FAILED_CHECK)); 
                } 
            } else { 
                result.setStatus(IResult.SUCCEEDED); 
            } 
            System.out.println("result  "+result);
            System.out.println("public execute complete");
            return result;
        } catch (Exception e) { 
            System.out.println("Exception e");
            e.printStackTrace();

            throw new WSMException(WSMException.FAULT_FAILED_CHECK, e); 
        } 
    } 

Вывод на консоль:

публичное исполнение valid_ips 127.0.0.1,192.168.1.1 isPresent true результат Успешное публичное выполнение полный

но веб-служба выдает GenericFault.

Аргументы: [недействительно] Неисправность: GenericFault: общая ошибка

Понятия не имею, что может быть не так, есть идеи?

вот полная трассировка стека:

Исключение в теме "главная" javax.xml.ws.soap.SOAPFaultException: GenericFault: общая ошибка в com.sun.xml.internal.ws.fault.SOAP12Fault.getProtocolException (SOAP12Fault.java:210) в com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException (SOAPFaultBuilder.java:119) в com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke (SyncMethodHandler.java:108) в com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke (SyncMethodHandler.java:78) в com.sun.xml.internal.ws.client.sei.SEIStub.invoke (SEIStub.java:107) на $ Proxy30.sayHello (неизвестный источник) в creditproxy.CreditRatingSoap12HttpPortClient.main (CreditRatingSoap12HttpPortClient.java:21) Вызванный: javax.xml.ws.soap.SOAPFaultException: GenericFault: общая ошибка в weblogic.wsee.jaxws.framework.jaxrpc.TubeFactory $ JAXRPCTube.processRequest (TubeFactory.java:203) в weblogic.wsee.jaxws.tubeline.FlowControlTube.processRequest (FlowControlTube.java:99) в com.sun.xml.ws.api.pipe.Fiber .__ doRun (Fiber.java:604) в com.sun.xml.ws.api.pipe.Fiber._doRun (Fiber.java:563) в com.sun.xml.ws.api.pipe.Fiber.doRun (Fiber.java:548) в com.sun.xml.ws.api.pipe.Fiber.runSync (Fiber.java:445) в com.sun.xml.ws.server.WSEndpointImpl $ 2.Process (WSEndpointImpl.java:275) в com.sun.xml.ws.transport.http.HttpAdapter $ HttpToolkit.handle (HttpAdapter.java:454) в com.sun.xml.ws.transport.http.HttpAdapter.handle (HttpAdapter.java:250) в com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle (ServletAdapter.java:140) в weblogic.wsee.jaxws.HttpServletAdapter $ AuthorizedInvoke.run (HttpServletAdapter.java:319) в weblogic.wsee.jaxws.HttpServletAdapter.post (HttpServletAdapter.java:232) в weblogic.wsee.jaxws.JAXWSServlet.doPost (JAXWSServlet.java:310) в javax.servlet.http.HttpServlet.service (HttpServlet.java:727) в weblogic.wsee.jaxws.JAXWSServlet.service (JAXWSServlet.java:87) в javax.servlet.http.HttpServlet.service (HttpServlet.java:820) в weblogic.servlet.internal.StubSecurityHelper $ ServletServiceAction.run (StubSecurityHelper.java:227) в weblogic.servlet.internal.StubSecurityHelper.invokeServlet (StubSecurityHelper.java:125) в weblogic.servlet.internal.ServletStubImpl.execute (ServletStubImpl.java:292) в weblogic.servlet.internal.TailFilter.doFilter (TailFilter.java:26) в weblogic.servlet.internal.FilterChainImpl.doFilter (FilterChainImpl.java:56) в oracle.dms.wls.DMSServletFilter.doFilter (DMSServletFilter.java:326) в weblogic.servlet.internal.FilterChainImpl.doFilter (FilterChainImpl.java:56) в weblogic.servlet.internal.WebAppServletContext $ ServletInvocationAction.run (WebAppServletContext.java:3592) в weblogic.security.acl.internal.AuthenticatedSubject.doAs (AuthenticatedSubject.java:321) в weblogic.security.service.SecurityManager.runAs (SecurityManager.java:121) в weblogic.servlet.internal.WebAppServletContext.securedExecute (WebAppServletContext.java:2202) в weblogic.servlet.internal.WebAppServletContext.execute (WebAppServletContext.java:2108) в weblogic.servlet.internal.ServletRequestImpl.run (ServletRequestImpl.java:1432) в weblogic.work.ExecuteThread.execute (ExecuteThread.java:201) в weblogic.work.ExecuteThread.run (ExecuteThread.java:173) Процесс завершен с кодом выхода 1.

Ответы [ 3 ]

1 голос
/ 04 января 2011

У меня была такая же проблема, но у них есть решение на Metalink (если вы еще не видели) Это решит проблему:

  public IResult execute(IContext context) throws WSMException {      
     IResult result = new Result();        
     try {         
       oracle.wsm.common.sdk.IMessageContext.STAGE stage =   ((oracle.wsm.common.sdk.IMessageContext)context).getStage();            
       if (stage  == IMessageContext.STAGE.request)  {    

          javax.security.auth.Subject subject = oracle.security.jps.util.SubjectUtil.getAnonymousSubject();                
          context.setProperty(oracle.wsm.common.sdk.IMessageContext.SECURITY_SUBJECT, subject);                       
          IAssertionBindings bindings = ((SimpleAssertion)(this.assertion)).getBindings();               
          IConfig config = bindings.getConfigs().get(0);               
          IPropertySet propertyset = config.getPropertySets().get(0);                  
          String valid_ips = propertyset.getPropertyByName("valid_ips").getValue();               
          String ipAddr = ((IMessageContext)context).getRemoteAddr();

          if (valid_ips != null && valid_ips.trim().length() > 0) {                  
             String[] valid_ips_array = valid_ips.split(",");
             boolean isPresent = false;                    
             for (String valid_ip : valid_ips_array) {                      
               if (ipAddr.equals(valid_ip.trim())) { 
                     isPresent = true;                      
               }                    
             }                   
             if (isPresent) {                       
                result.setStatus(IResult.SUCCEEDED);                    
             } else {                          
                result.setStatus(IResult.FAILED);                      
                result.setFault(new WSMException(WSMException.FAULT_FAILED_CHECK));                    
             }               
          } else {                
              result.setStatus(IResult.SUCCEEDED);               
          }               
          return result;          
       }        
     } catch (Exception e) {            
       throw new WSMException(WSMException.FAULT_FAILED_CHECK, e);        
     }      
     return result;    
}
0 голосов
/ 03 декабря 2010

Я встречал ту же проблему. Глядя глубже в классах wls, я обнаружил, что WSMMessageContext не содержит правого принципала в теме. и фактически IllegalArgumentExeception выбрасывается, к сожалению, это реальное исключение упаковано и упаковано много раз, и мы можем увидеть «GenericFault: универсальная ошибка», которая является последней упакованной в классе WSMAgentHook, который выполняет вывод в консоли. К сожалению, я не смог продвинуться вперед и, похоже, никто не использует Custom Security Assert. Так что никто не может помочь нам, кажется

0 голосов
/ 24 ноября 2010
        result.setFault(null);

где вы устанавливаете статус для успеха. Он использует значение ошибки независимо от настройки статуса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...