Как я могу настроить фильтр для кода состояния 302 весной mvc java и response.redirect на настраиваемую страницу? - PullRequest
0 голосов
/ 27 мая 2020

Привет всем! Я хочу создать RedirectionFilter на java весне. Основная цель - при обнаружении кода состояния 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);
}

Что-то вроде того. У меня нет идей. Спасибо за помощь.

1 Ответ

0 голосов
/ 27 мая 2020

Вы можете использовать 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);
    }
}
...