我正在尝试连接到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。
答案 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安全性:
然后可以像这样通过用户/密码从任何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();
}