【问题标题】:How can i custom filter for 302 Status Code in spring mvc java and response.redirect to custom page?我如何在spring mvc java中自定义过滤器302状态码并将response.redirect到自定义页面?
【发布时间】:2026-02-17 20:10:01
【问题描述】:

大家好,我想在 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);
}

类似的东西。我没有主意了。感谢您的帮助。

【问题讨论】:

    标签: java spring-mvc servlets filter


    【解决方案1】:

    您可以使用 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);
        }
    }
    

    【讨论】:

    • 您好,感谢您提供的信息,您可以提供更多信息吗?我不需要处理过滤器吗?谢谢。
    • 我之前尝试过 getStatus 方法,但它显示方法 getStatus() is undefined for type HttpServletResponse 的错误。
    • 请尝试使用上面更新的代码,如果您遇到任何问题,请告诉我。
    • 任何更新,此解决方案是否解决了您的问题?