繁体   English   中英

spring boot - 从过滤器返回 pojo 响应

[英]spring boot - returning pojo response from filter

我想创建一个具有自动装配构造函数参数的过滤器/bean,并且对于对某些 url 的每个请求检查标头并返回一个 pojo 错误(或理想情况下抛出将由 spring 处理的异常),或通过过滤器链传递请求. 就像是

@Bean
class MyFilter {

  @Autowired
  public MyFilter(MyService myService) {...}

  public doFilter(request, response, chain) {
     if (request. ...) {
        throw new ResponseStatusException(HttpStatus.BAD_REQUEST)
        // or return new MyErrorPojo()
     }
     return chain.doFilter(request, response)
  }
}

春天的做法是什么?

也许这会帮助你。

import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@Component
@Order( 1 )
public class RequestFilter implements Filter
{

    @Override
    public void doFilter(
            ServletRequest request,
            ServletResponse response,
            FilterChain chain ) throws IOException, ServletException

    {

        HttpServletRequest req = ( HttpServletRequest ) request;
        if( false )
        {
            response.getWriter().println( "error" );
            throw new ServletException( "" );
        }
        else
        {
            doFilter( request, response, chain );
        }

    }
}

我认为在这里你有一个相当令人困惑的技术组合:

过滤器属于 servlet 规范,并在 HTTP 请求抽象级别上运行。

一旦过滤器链通过并到达 DispatcherServlet(spring mvc 的入口点),spring 就会与所有 MVC 好东西一起发挥作用。

因此,如果您想检查标题,则有一个名为org.springframework.web.servlet.handler.HandlerInterceptorAdapter的抽象

基本上可以创建一个实现这个接口的类,并检查方法中的头:属于这个接口

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

如您所见,您可以访问请求并可以检查那里的标头。

现在我自己没有使用过(现在无法检查)但它需要在 WebMvcConfigurer 级别进行配置,该配置具有特殊的“addInterceptor”方法。 所以我不能确认只添加一个创建类型的 bean 就足够了,或者你可以用 WebMvcConfigurer 配置它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM