gpt4 book ai didi

java - 如何在 spring mvc java 中自定义过滤器 302 状态代码和 response.redirect 到自定义页面?

转载 作者:行者123 更新时间:2023-12-01 16:30:58 27 4
gpt4 key购买 nike

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

关于java - 如何在 spring mvc java 中自定义过滤器 302 状态代码和 response.redirect 到自定义页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62044605/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com