I was trying to get a request to be send to a specific controller action in case of session expiry. I was trying to use redirect
and later forward
(to avoid additional requests from the client) method from grails. But I keep getting this error even though the params to the methods are all correct.
Message: No signature of method: com.rwi.springsecurity.filters.CustomSessionExpiryFilter.forward() is applicable
for argument types: (java.util.LinkedHashMap) values: [[controller:exampleApi, action:init, params:[...]]]
Then it struck, maybe by default we cannot use those grails methods in the spring security classes as they are under src/groovy
and also the doc mentions that the method is to forward from one action to another. So in this case, to forward a request we can use methods from the servlet classes.
Forward a request to a controller action, where api
is the controller and init
is the action which includes query string as well.
request.getRequestDispatcher("/api/init").forward(request, response)
For a redirect request we can use response.sendRedirect()
method with URI containing the necessary params like query strings appended manually. An example code snippet follows.
// Construct the redirect URI
String responseUri = {
String uri = request.forwardURI
String qs = request.getQueryString()
return (qs?.size() > 0) ? "${uri}?${qs}" : uri
}()
response.sendRedirect(responseUri)