SAP / cloud-security-services-integration-library

Integration libraries and samples for authenticating users and clients bound to XSUAA authentication and authorization service or Identity authentication service.
Apache License 2.0
151 stars 136 forks source link

HelloTokenClientServlet.java exception #360

Closed steynw closed 4 years ago

steynw commented 4 years ago

Executing the Sample Code:

Unable to obtain the Access-Token - the code compiles but throws a runtime ClassNotFoundException.


OAuth2ServiceConfiguration configuration = Environments.getCurrent().getXsuaaConfiguration(); String clientSecret = configuration.getClientSecret(); String clientid = configuration.getClientId(); String url = configuration.getUrl().toString();

response.getOutputStream().println("clientSecret: "+clientSecret); response.getOutputStream().println("clientid: "+clientid); response.getOutputStream().println("url: "+url);

XsuaaTokenFlows tokenFlows = new XsuaaTokenFlows( new DefaultOAuth2TokenService(),new XsuaaDefaultEndpoints(url), new ClientCredentials(clientid, clientSecret)); OAuth2TokenResponse tokenResponse = tokenFlows.clientCredentialsTokenFlow().execute(); response.getOutputStream().println("Access-Token: "+tokenResponse.getAccessToken());


clientSecret: O0ZZZZZZZ clientid: sb-s4hctmjvprdrouter-EnterpriseMessaging-ZZZZZZ url: https://enterprisemessaging-em.authentication.sap.hana.ondemand.com


25 Aug 2020, 09:48:59 (GMT-04:00) - [APP/PROC/WEB/0] { "written_at":"2020-08-25T13:48:59.700Z","written_ts":496834699484602,"tenant_id":"-","component_id":"af83ae30-c98a-4328-b288-b3314158afe6","component_name":"s4hctmjv-jv","DCComponent":"","organization_name":"S4HC_DBS_CF_EnterpriseMessaging-EM","component_type":"application","space_name":"HDB-PRD","component_instance":"0","organization_id":"b82af7e0-d5d6-4fdb-b44d-ef529d48c3c3","correlation_id":"-","CSNComponent":"","space_id":"c030b066-bdb6-4d5e-b0f1-caf51c615ecf","Application":"s4hctmjv-jv","container_id":"10.0.74.180","type":"log","logger":"org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/].[com.sap.tm.servlet.UserContext]","thread":"http-nio-0.0.0.0-8080-exec-6","level":"ERROR","categories":[],"msg":"Servlet.service() for servlet [com.sap.tm.servlet.UserContext] in context with path [] threw exception [Servlet execution threw an exception] with root cause","stacktrace":["java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest","\tat org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1358)","\tat org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1180)","\tat com.sap.tm.servlet.UserContext.doGet(UserContext.java:75)","\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:626)","\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:733)","\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)","\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)","\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)","\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)","\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)","\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)","\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)","\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:668)","\tat com.sap.xs.security.container.XSSecurityAuthenticator.invoke(XSSecurityAuthenticator.java:78)","\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)","\tat com.sap.xs.java.valves.ErrorReportValve.invoke(ErrorReportValve.java:66)","\tat ch.qos.logback.access.tomcat.LogbackValve.invoke(LogbackValve.java:256)","\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)","\tat com.sap.xs.jdbc.datasource.valve.JDBCValve.invoke(JDBCValve.java:62)","\tat com.sap.xs.security.TenantIdValve.invoke(TenantIdValve.java:34)","\tat com.sap.xs.security.UserInfoValve.invoke(UserInfoValve.java:18)","\tat com.sap.xs.statistics.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:43)","\tat com.sap.xs.logging.catalina.RuntimeInfoValve.invoke(RuntimeInfoValve.java:42)","\tat org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747)","\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)","\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:615)","\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)","\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)","\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1626)","\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)","\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)","\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)","\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)","\tat java.lang.Thread.run(Thread.java:836)"] }


Pom dependenies

pom.txt

nenaraab commented 4 years ago

Hi @steynw

first of all lets clarify your use case.

I assume you have a

  1. J2EE application and you like to protect your endpoints /Servlets via SAP Java Buildpack?
  2. Furthermore you like to do a token-exchange using XsuaaTokenFlows?

In case I`m right, you only need these maven dependencies:

  1. <dependency>
    <groupId>com.sap.cloud.security</groupId>
    <artifactId>java-api</artifactId>
    <version>${sap.cloud.security.version}</version>
    <scope>provided</scope>
    </dependency>

    Examples/documentation: https://github.com/SAP/cloud-security-xsuaa-integration/blob/master/README.md#token-validation-for-java-web-applications-using-sap-java-buildpack

  2.      <dependency>
            <groupId>com.sap.cloud.security</groupId>
            <artifactId>java-security</artifactId>
            <version>${sap.cloud.security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>${apache.httpclient.version}</version>
        </dependency>

    Examples/documentation: https://github.com/SAP/cloud-security-xsuaa-integration#token-exchange-for-java-applications

and as you've already done, make sure that slf4j-api is already provided with SAP Java buildpack (i think you have already considered that).

Best regards, Nena

hassler-d commented 4 years ago

Hi,

to clarify: If you are using the SAP Java Buildpack and include java-security directly in your application, you will have to exclude slf4j-api because both java-security and the buildpack provide it and that can cause issues.

So in case of SAP Java Buildpack you should define your java-security dependency like this:

        <dependency>
            <groupId>com.sap.cloud.security</groupId>
            <artifactId>java-security</artifactId>
            <version>${sap.cloud.security.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

This is what Nena meant with 'slf4j-api is already provided with SAP Java buildpack'.

Best Regards Daniel

steynw commented 4 years ago

Got it, thanks a lot.