Spring 3.1 MVC: GET & POST on the same mapping, can it work? -
i'm learning spring 3.1.
my webapp name "acme".
the url https://blah.blah.blah/acme
that url set display login.jsp
i have "/login" mapping in controller login.jsp submits to
if goes wrong return user login.jsp url in browser: https://blah.blah.blah/acme/login
the "/login" mapping set handle post requests, concerned users bookmarking https://blah.blah.blah/acme/login, , getting error message of "get request not supported"
so, thought put in function handle requests /login reroute through general mapping handler "/" , "/home":
login.controller.java
package gov.noaa.acme.controller; import java.security.principal; import javax.servlet.http.*; import org.springframework.stereotype.controller; import org.springframework.validation.*; import org.springframework.ui.modelmap; import org.springframework.web.servlet.modelandview; import org.springframework.web.bind.annotation.requestparam; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.sessionattributes; import org.apache.log4j.logger; @controller public class logincontroller { private static final logger logger = logger.getlogger(logincontroller.class); @requestmapping({"/","home"}) public string home(modelmap model,httpsession session,httpservletrequest request) { // stuff return "login"; } @requestmapping(value = "/login", method = requestmethod.get) public string login_get(){ logger.debug("started..."); return "forward:home"; } @requestmapping(value = "/login", method = requestmethod.post) public string login(@modelattribute("laph") laph laph, bindingresult bindingresult, modelmap model, httpsession session, httpservletrequest request, httpservletresponse response, @requestparam(required=true) string last_usertype) { if (bindingresult.haserrors()) { logger.debug("error returning home"); return "home"; } logger.debug("started ...."); // authentication if (!isauthenticated) { model.put("status_message", error_message); return "login"; } // success, send newly authenticated user search page nextview = "search"; return "redirect:" + nextview; } }// end class logincontroller my logs show not reaching controller method handling requests /login, i'm still getting error messages not supported /login.
any ideas on how can fix this?
thanks
steve
i concerned users bookmarking https:// blah.blah.blah/acme/login, , getting error message of "get request not supported".
your method signatures correct; annotations have placed on login_get , login, spring not confused , invoke correct methods , post requests.
your method home wrong; returns string "login", guess not have view named login , invoke 1 of login methods. in case should have returned "forward:login", solution not better.
my advice is:
/homeshould render home view, using filehome.jspor whatever view technology you're using.- use handlerinterceptor check whether user logged in, , if not, redirect him login url.
Comments
Post a Comment