当前位置: 首页 > 知识库问答 >
问题:

Spring 3.1 MVC: GET

史宸
2023-03-14

我正在学习Spring 3.1。

我的webapp名字是“acme”。

网址大致是https://blah.blah.blah/acme

该 URL 设置为显示登录名.jsp

我在我的控制器中有一个“/登录”映射,我的login.jsp提交给它

如果出现问题,它返回用户到login.jsp与此网址在浏览器:https://blah.blah.blah/acme/login

“/登录”映射是为了处理POST请求而设置的,所以我担心用户https://blah.blah.blah/acme/login添加书签,并得到“GET请求不受支持”的错误消息

因此,我想我应该放一个函数来处理对/登录的GET请求,以便通过我的“/”和“/home”的通用映射处理程序重新路由:

登录控制器.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请求的控制器方法,我仍然收到错误消息,表示不支持GET用于/login。

关于如何解决此问题的任何想法?

谢谢

史蒂夫

共有1个答案

申奇希
2023-03-14

我担心用户书签https://blah.blah.blah/acme/login,,并得到“获取请求不支持”的错误信息。

您的方法签名是正确的;使用您在login_get登录上放置的注释,Spring不会混淆,并且会为GET和POST请求调用正确的方法。

您的方法< code>home是错误的;它返回字符串< code >“login”,但是我猜您没有名为log in的视图,并且您希望它调用其中一个登录方法。在这种情况下,您应该返回“forward:login”,但是这个解决方案也好不到哪里去。

我的建议是:

  1. /home应该使用filehome.jsp或您正在使用的任何视图技术来呈现主视图。
  2. 使用HandlerIntericetor检查用户是否已登录,如果未登录,则仅将他重定向到登录url。
 类似资料:

相关问答

相关文章

相关阅读