spring 引导中的某些链接不允许除 GET 之外的任何内容

Disallow anything but GET for certain links in spring boot

我有一个包含很多链接的简单博客网页。他们都在使用 GetMapping。因此,每当我有一个机器人尝试使用 POST 访问这些页面时,我都会收到一条错误消息

Request method 'Post' not supported.

我明白这是因为我用的是@GetMapping,换成@RequestMapping就万事大吉了。但是我不想让任何人使用 POST 访问我的博客。唯一应该 POST 的页面是 /contact/message 除了该页面的所有内容都应通过 GET 访问。

所以我有两个问题: 我如何强制人们只使用 GET。 如何捕获使用 POST 的尝试并将它们重定向到 /error?

旁注:我不使用 spring 安全性,没有登录或任何隐藏在帐户后面的东西。此外,我的大部分映射都使用正则表达式。不知道这个信息有没有帮助。

@GetMapping(value = {
            "", "{page:^[1-9][0-9]*$}", "{section:^\d*[a-zA-Z][a-zA-Z0-9]*[^.]+$}",
            "{section:^\d*[a-zA-Z][a-zA-Z0-9]*[^.]+$}/{page:^[1-9][0-9]*$}"})

您可以在您的应用程序中添加过滤器:

public class Tfil implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest,
                         ServletResponse servletResponse,
                         FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        if (!"GET".equals(req.getMethod())) {
            //redirect or error page
            HttpServletResponse res = (HttpServletResponse) servletResponse;
            //here redirect
            res.sendRedirect("redirect url");
            //or return 404 code
            res.setStatus(404);
        }
        filterChain.doFilter(servletRequest,servletResponse);
    }
}