Aktualisieren
Grails 3.2.1 verfügt über eingebaute Funktion zur Unterstützung von CORS. Check this out http://docs.grails.org/latest/guide/introduction.html#whatsNewCors
Fügen Sie einfach diese in Ihrem application.yml
es zu ermöglichen
grails:
cors:
enabled: true
(Stellen Sie sicher, dass Sie die Umwelt suchen, für die Sie CORS aktivieren)
Original-Beitrag
Sie benötigen kein Plugin (außer Sie wollen dieses Plugin benutzen), um CORS hier zu aktivieren. Nun, für Ihre Erholung Endpunkte, können Sie immer die CORS ermöglichen, die Grails Abfangjäger mit wie unten:
class CorsInterceptor {
CorsInterceptor() {
matchAll()
}
boolean before() {
if (request.method == "OPTIONS") {
response.setHeader("Access-Control-Allow-Origin", "http://localhost:4200")
response.setHeader("Access-Control-Allow-Credentials", "true")
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE")
response.setHeader("Access-Control-Max-Age", "3600")
response.status = 200
}
return true
}
boolean after() { true }
}
Aber Grails Abfangjäger können die Endpunkte nicht abfangen vom Kern/Rest Spring Security bereitgestellt Plugins, da die Priorität ihrer Abfangjäger sind höher als die der Grails-Abfangjäger. Sie müssen also zuerst einen Kundenfilter hinzufügen und ihn dann vor den Spring-Filtern registrieren.
Fügen Sie eine Datei in src/main/groovy
:
package test
import org.springframework.web.filter.OncePerRequestFilter
import javax.servlet.FilterChain
import javax.servlet.ServletException
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
class CorsFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest req, HttpServletResponse resp, FilterChain chain)
throws ServletException, IOException {
if (req.getMethod() == "OPTIONS") {
resp.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
resp.addHeader("Access-Control-Max-Age", "3600")
resp.addHeader("Access-Control-Allow-Origin", "http://localhost:4200")
resp.addHeader("Access-Control-Allow-Credentials", "true")
resp.status = 200
} else {
chain.doFilter(req, resp)
}
}
}
Registrieren Sie auf dem resources.groovy
:
beans = {
corsFilterFoo(CorsFilter)
}
Nun fügen Sie die Filterkette Frühling vor dem Sicherheitskontext Filter (in Bootstrap.groovy
):
SpringSecurityUtils.clientRegisterFilter("corsFilterFoo",
SecurityFilterPosition.SECURITY_CONTEXT_FILTER.order - 1)
Referenzen: https://github.com/grails-plugins/grails-spring-security-core/blob/v3.1.1/src/main/groovy/grails/plugin/springsecurity/SpringSecurityUtils.groovy#L698
Hey! Grails 3.2.1 wurde gerade veröffentlicht. Es hat CORS integriert http://docs.grails.org/latest/guide/introduction.html#whatsNewCors –