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);
}
}
我有一个包含很多链接的简单博客网页。他们都在使用 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);
}
}