java - 我如何在spring mvc java中自定义过滤器302状态码并将response.redirect到自定义页面?
问题描述
大家好,我想在 java spring 中创建 RedirectionFilter。主要目的是当检测到状态码 302 时发送重定向并用自定义文本内容替换响应内容。第一个问题是不知道如何捕捉响应码 302。这是我目前的想法。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) (request);
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
String redirectURL="www.google.com";
if(statuscode == 302 ){
httpServletResponse.sendRedirect(redirectURL);
}
类似的东西。我没有主意了。感谢您的帮助。
解决方案
您可以使用 HandlerInterceptorAdapter 在每次调用后获取响应,并可以验证响应代码并做必要的事情
@Component
public class TestInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.Object object) throws Exception {
System.out.println("test");
return true;
}
@Override
public void afterCompletion(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.Object handler, @org.springframework.lang.Nullable java.lang.Exception ex) throws java.lang.Exception {
if(response.getStatus()==302){
// your code
}
}
}
创建拦截器后需要在 InterceptorRegistry 中注册
@Component
public class InterceptorsConfig implements WebMvcConfigurer {
@Autowired
private TestInterceptor testInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(testInterceptor);
}
}
一旦触发请求,控件将首先到达拦截器。
Restcontroller 示例
@RestController
@RequestMapping("/test")
public class Restcontroller {
@GetMapping
public ModelAndView redirectWithUsingRedirectPrefix(ModelMap model) {
model.addAttribute("attribute", "redirectWithRedirectPrefix");
return new ModelAndView("redirect:/redirectedUrl", model);
}
}
推荐阅读
- node.js - 一起使用两个 dto 类时不发送错误消息
- python - __new__ 中的 cls 起什么作用?
- python - Python 脚本说文件名、目录名或卷标语法不正确
- html - 如何固定网页的宽度?
- matlab - 如何从 PDE 结果中提取等值面?
- visual-studio-code - 可以在选定空间的中间对齐文本吗?
- c# - 如何在 c# 中使用 x509 证书和 sha256 算法签署汤请求
- c++ - C++ 父类和子类具有同名的方法
- android - Android Compose - Radiogroup/RadioButton 初始状态与更改
- google-cloud-ml - 带有 CSV 输入的 Vertex AI 批量预测