Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Eclipse Scout » RESTful mit Eclipse Scout
RESTful mit Eclipse Scout [message #1836143] Tue, 22 December 2020 13:31 Go to next message
Christoph Quinten is currently offline Christoph QuintenFriend
Messages: 13
Registered: November 2020
Junior Member
Ich habe eine Scout Anwendung gebaut und möchte hier nun einen REST Service mit anbinden, um mit dieser Anwendung zu kommunizieren.
Dazu habe ich mich am Technical Guid und Internetrecherchen orientiert.

<<RestResource>>
...
@GET
@Path("/hello")
@Produces(MediaType.TEXT_PLAIN)
public String getHello() {
return "Hello";
}

@POST
@Path("/transfer")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
...

Wenn ich dies nun in Postman teste funktioniert das GET einwandfrei und ich bekomme Hello als Ergebnis zurück.

Beim POST stoße ich auf Probleme, bei denen ich eure Hilfe bräuchte. Und zwar bekomme ich beim Post wenn ich ein valides JSON Objekt mitgebe folgende Result-Meldung:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 403 Forbidden</title>
</head>
<body><h2>HTTP ERROR 403</h2>
<p>Problem accessing /api/cocoscome/transfer. Reason:
<pre> Forbidden</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.14.v20181114</a><hr/>

</body>
</html>

Was muss ich hier tun, damit auch das POST funktioniert?

Vielen Dank schon einmal im voraus.
Re: RESTful mit Eclipse Scout [message #1836144 is a reply to message #1836143] Tue, 22 December 2020 13:35 Go to previous messageGo to next message
Andre Wegmueller is currently offline Andre WegmuellerFriend
Messages: 204
Registered: September 2012
Location: Baden-Dättwil, Switzerla...
Senior Member
Hallo Christoph

Kann es sein, dass der Content-Type in deinem HTTP Request nicht gesetzt oder != application/json ist?

André


Eclipse Scout Homepage | Documentation | GitHub
Re: RESTful mit Eclipse Scout [message #1836146 is a reply to message #1836144] Tue, 22 December 2020 13:44 Go to previous messageGo to next message
Christoph Quinten is currently offline Christoph QuintenFriend
Messages: 13
Registered: November 2020
Junior Member
Leider nein angefügt sieht man den Screenshot aus Postman.
Re: RESTful mit Eclipse Scout [message #1836172 is a reply to message #1836146] Wed, 23 December 2020 06:49 Go to previous messageGo to next message
Paolo Bazzi is currently offline Paolo BazziFriend
Messages: 33
Registered: January 2017
Location: Switzerland
Member
Hallo Christoph

Welche Filter zur Autorisierung hast du im web.xml resp. im Jetty konfiguriert?
Wie sieht das Log im Server aus, siehst du, bis wohin der Call kommt und welche Stelle ihn ablehnt? Wird der Call in Scout abgelehnt oder kommt das 403 aus der Jersey Library?
Ggf. musst du im logback.xml das Loglevel höher setzen um alles nötige zu sehen.

Viele Grüsse
Paolo


Eclipse Scout Homepage | Documentation | GitHub
Re: RESTful mit Eclipse Scout [message #1836175 is a reply to message #1836172] Wed, 23 December 2020 08:45 Go to previous messageGo to next message
Matthias Villiger is currently offline Matthias VilligerFriend
Messages: 232
Registered: September 2011
Senior Member
Hallo Christoph

Es könnte auch der hier sein: AntiCsrfContainerFilter

Dass es für GET klappt und für POST nicht, deutet darauf hin.

Standardmässig sind GET, OPTIONS und HEAD Methoden auch ohne custom HTTP request header erlaubt, da sie keine Daten ändern dürfen (siehe auch HttpMethodAntiCsrfFilterExclusion).
POST hingegen darf Daten ändern und muss somit vor CSRF geschützt werden.

Daher musst du für diese Requests den "X-Requested-With" HTTP Request header mitgeben (oder programmatisch die Exclusions erweitern falls der Header nicht möglich ist).

Falls das dein Problem ist, müsstest du das im INFO log des Servers für die Klasse AntiCsrfContainerFilter sehen.
Re: RESTful mit Eclipse Scout [message #1836176 is a reply to message #1836172] Wed, 23 December 2020 08:49 Go to previous messageGo to next message
Christoph Quinten is currently offline Christoph QuintenFriend
Messages: 13
Registered: November 2020
Junior Member
Hallo Paolo,

Diese Punkte stehen im web.xml und habe ich so aus dem Technical Guide:
<!-- JAX-RS Jersey Servlet -->
<servlet>
<servlet-name>api</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>org.eclipse.scout.rt.rest.RestApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>api</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>

<filter>
<filter-name>HttpServerRunContextFilter</filter-name>
<filter-class>org.eclipse.scout.rt.server.context.HttpServerRunContextFilter</filter-class>
<init-param>
<param-name>session</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>HttpServerRunContextFilter</filter-name>
<url-pattern>/api/*</url-pattern>
</filter-mapping>

Und das hier steht im Server-Log:
org.eclipse.scout.rt.rest.container.AntiCsrfContainerFilter.filter(AntiCsrfContainerFilter.java:48) - Request 'http://localhost:8080/api/cocoscome/transfer' blocked because no 'X-Requested-With' header was present (possible CSRF attack).
Re: RESTful mit Eclipse Scout [message #1836178 is a reply to message #1836176] Wed, 23 December 2020 09:00 Go to previous messageGo to next message
Paolo Bazzi is currently offline Paolo BazziFriend
Messages: 33
Registered: January 2017
Location: Switzerland
Member
OK das Log gibt Matthias recht, daran hatte ich gar nicht mehr gedacht.

Dann musst für POST etc. einfach einen leeren X-Requested-With Header mitsenden und dann sollte es klappen.

Viele Grüsse
Paolo


Eclipse Scout Homepage | Documentation | GitHub
Re: RESTful mit Eclipse Scout [message #1836179 is a reply to message #1836178] Wed, 23 December 2020 09:18 Go to previous messageGo to next message
Christoph Quinten is currently offline Christoph QuintenFriend
Messages: 13
Registered: November 2020
Junior Member
Okay perfekt danke. Über Postman funktioniert es nun.
Im programmierten Aufruf muss ich dann auch einfach einen leeren Header mitgeben oder?
Re: RESTful mit Eclipse Scout [message #1836180 is a reply to message #1836179] Wed, 23 December 2020 09:20 Go to previous messageGo to next message
Paolo Bazzi is currently offline Paolo BazziFriend
Messages: 33
Registered: January 2017
Location: Switzerland
Member
Christoph Quinten wrote on Wed, 23 December 2020 09:18
Okay perfekt danke. Über Postman funktioniert es nun.
Im programmierten Aufruf muss ich dann auch einfach einen leeren Header mitgeben oder?


Genau. Wenn dein Client auch in Scout realisiert ist, kannst du dir die Klasse org.eclipse.scout.rt.rest.client.AntiCsrfClientFilter dazu ansehen. Die erledigt das für dich automatisch.

Ansonsten den Code hier übernehmen:
org.eclipse.scout.rt.rest.csrf.AntiCsrfHelper.prepareRequest(ClientRequestContext)

Viele Grüsse
Paolo


Eclipse Scout Homepage | Documentation | GitHub
Re: RESTful mit Eclipse Scout [message #1837047 is a reply to message #1836180] Thu, 21 January 2021 11:46 Go to previous messageGo to next message
Christoph Quinten is currently offline Christoph QuintenFriend
Messages: 13
Registered: November 2020
Junior Member
Bisher klappt nun alles. Jedoch wollte ich die Anwendung nun auf einen Tomcat deployen. Das funktioniert auch. Aber kein Aufruf gegen die API funktioniert. Ich bekomme immer eine 404 zurück. Was muss ich hier tun?
Re: RESTful mit Eclipse Scout [message #1837060 is a reply to message #1837047] Thu, 21 January 2021 14:09 Go to previous message
Paolo Bazzi is currently offline Paolo BazziFriend
Messages: 33
Registered: January 2017
Location: Switzerland
Member
Hi Christoph
Christoph Quinten wrote on Thu, 21 January 2021 11:46
Bisher klappt nun alles. Jedoch wollte ich die Anwendung nun auf einen Tomcat deployen. Das funktioniert auch. Aber kein Aufruf gegen die API funktioniert. Ich bekomme immer eine 404 zurück. Was muss ich hier tun?


Hast du das JAX-RS Servlet und den Filter wie weiter oben gepostet in deinem .app.war Modul auch im web.xml hinterlegt? Für die deployte Applikation wird ja das web.xml aus dem .app.war Modul verwendet.

Was sagt dein Log des Servers?
Du müsstest beim Starten zumindest eine Zeile in dem Stil haben:
[main] org.eclipse.scout.rt.rest.RestApplication.<init>(RestApplication.java:55) - org.eclipse.scout.rt.rest.RestApplication initialized in ....

Und rufst du das REST-API direkt auf dem Backend Server auf? Welche Art von Authentifizierung hast du für /api konfiguriert auf dem Backend?

Grüsse
Paolo


Eclipse Scout Homepage | Documentation | GitHub
Previous Topic:Session Timeout nach Tomcat Deployment
Next Topic:A newcomer: building a web based REST frontend
Goto Forum:
  


Current Time: Tue Apr 16 11:05:56 GMT 2024

Powered by FUDForum. Page generated in 0.63255 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top