首页 > 解决方案 > 我如何在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);
}

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

标签: javaspring-mvcservletsfilter

解决方案


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

推荐阅读