1

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 がサポートされていないというエラー メッセージが引き続き表示されます。

これを修正する方法についてのアイデアはありますか?

ありがとう

スティーブ

4

1 に答える 1

0

ユーザーが https://blah.blah.blah/acme/login をブックマークし、「GET リクエストはサポートされていません」というエラー メッセージが表示されることを懸念しています。

メソッドの署名は正しいです。および に配置したアノテーションを使用するlogin_getlogin、Spring は混乱せず、GET および POST リクエストに対して正しいメソッドを呼び出します。

あなたの方法homeは間違っています。string を返しますが、"login"login という名前のビューがなく、ログイン メソッドの 1 つを呼び出したいと思います。その場合、「forward:login」を返す必要がありますが、この解決策はあまり良くありません。

私のアドバイスは次のとおりです。

  1. /homehome.jspファイルまたは使用しているビュー テクノロジを使用して、ホーム ビューをレンダリングする必要があります。
  2. HandlerInterceptorを使用して、ユーザーがログインしているかどうかを確認し、ログインしていない場合にのみログイン URL にリダイレクトします。
于 2012-07-05T17:07:33.057 に答える