Spring 3.1を学んでいます。
私の webapp 名は「acme」です。
URLはおおよそhttps://blah.blah.blah/acme です
その URL はlogin.jspを表示するように設定されています
login.jsp が送信するコントローラーに「/login」マッピングがあります。
何か問題が発生した場合、ブラウザで次の URL を 使用してユーザーをlogin.jspに戻します: https://blah.blah.blah/acme/login
「/login」マッピングは POST リクエストを処理するように設定されているため、ユーザーが https://blah.blah.blah/acme/loginをブックマークし、「GET リクエストがサポートされていません」というエラー メッセージが表示されることを懸念しています。
そこで、/login への GET リクエストを処理する関数を追加して、"/" と "/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) {
// Do some 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 ....");
// Do authentication
if (!isAuthenticated) {
model.put("status_message", error_message);
return "login";
}
// success, send newly authenticated user to a search page
nextView = "search";
return "redirect:" + nextView;
}
}// end class LoginController
ログを見ると、/login の GET リクエストを処理するコントローラ メソッドに到達していないことがわかります。/login では GET がサポートされていないというエラー メッセージが引き続き表示されます。
これを修正する方法についてのアイデアはありますか?
ありがとう
スティーブ