使用UME API登录UME

时间:2019-01-16 07:16:05

标签: java sap ejb-3.0

我正在尝试连接到SAP AS JAVA系统并操纵UME。 我在Java系统中有一个EJB WebService(HelloWorldEJB),我试图从外部应用程序(AppService)的Restful服务中访问HelloWorldEJB。

因此流程如下: UI5应用程序(AppWeb)-> AppService-> HelloWorldEJB

我可以点击HelloWorldEJB,但是当我检查其登录用户时,显示为“来宾用户”。这是因为用户授权未在HelloWorldEJB中完成。 如何使用UME API在HelloWorldEJB中与用户登录?

AppService代码以调用HelloWorldEJB:

@Path("/services")
public class RestService {
    @GET
    @Path("/hello")
    public String sayHello() {
        String result = "";
        try {           
            java.net.URL url =  new java.net.URL("http:wsldUrl");
            javax.xml.namespace.QName qName =  new javax.xml.namespace.QName("http://sap.com/qName", "HelloBeanService");
            HelloBeanService client = new HelloBeanService(url, qName);
            HelloBean helloService = client.getHelloBeanPort();
            result = helloService.sayHello();
        } catch (Exception e) {
            result = e.toString();
        }
        return result;
    }
}

用于检查登录用户的HelloWorldEJB代码:

@WebService(endpointInterface = "com.sap.tutorial.helloworld.HelloBeanRemote", portName = "HelloBeanPort", serviceName = "HelloBeanService", targetNamespace = "http://sap.com/tutorial/helloworld/")
@Stateless(name="HelloBean")
public class HelloBean implements HelloBeanRemote, HelloBeanLocal {

        private String message = "Hello, ";
        public String sayHello() {
            IUser user = UMFactory.getAuthenticator().getLoggedInUser();
            return message + user.getDisplayName();
        }
}

我知道我们应该使用

ILogonAuthentication logonAuthentication = UMFactory.getLogonAuthenticator();

并传递HttpServletRequest和HttpServletResponse

logonAuthentication.logon(request, response, "default");

但是我无法让HttpServletRequest和HttpServletResponse传递到登录。 我没有使用Servlet客户端来访问EJB。

1 个答案:

答案 0 :(得分:1)

解决方案由作者公开,并在另一个站点上给出。我只想在这里给其他研究者。

首先,我们需要为WebService类设置以下注释:

@AuthenticationDT(authenticationLevel = AuthenticationEnumsAuthenticationLevel.BASIC)

为此,您需要进行以下导入

import com.sap.engine.services.webservices.espbase.configuration.ann.dt.AuthenticationDT; 
import com.sap.engine.services.webservices.espbase.configuration.ann.dt.AuthenticationEnumsAuthenticationLevel;

然后需要通过以下步骤为Web服务设置Web安全性:

https://help.sap.com/doc/saphelp_nw73ehp1/7.31.19/en-US/4b/5c8953d4be4cb9e10000000a42189b/frameset.htm

然后可以像这样通过用户/密码从任何REST服务中调用Web服务:

try{
  java.net.URL url =new java.net.URL("http://host.com/HelloBeanService/HelloBean?wsdl");
  javax.xml.namespace.QName qName =new javax.xml.namespace.QName("http://sap.com/tutorial/helloworld/", "HelloBeanService");
  HelloBeanService client=new HelloBeanService(url, qName);
  HelloBean helloService =client.getHelloBeanPort();


  // Add username and password for Basic Authentication
  Map<String, Object> reqContext = ((BindingProvider) helloService).getRequestContext();
  reqContext.put(BindingProvider.USERNAME_PROPERTY, "YOUR_USERNAME");
  reqContext.put(BindingProvider.PASSWORD_PROPERTY, "YOUR_PASSWORD");

  result= helloService.sayHello();
}
catch(Exceptione){
  result=e.toString();
}