【问题标题】:swagger is not opening after adding OncePerRequestFilter is spring boot application添加OncePerRequestFilter 后swagger 没有打开是spring boot 应用程序
【发布时间】:2020-07-14 17:32:42
【问题描述】:

我已经在我的 springboot 应用程序中实现了 OncePerRequestFilter,但是在添加过滤器 swagger 后没有打开它给出 401 错误(这很明显)。我的问题是如何绕过过滤器中的招摇。

我在我的 pom 文件中只添加了这个依赖项

<dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
            <version>${swagger.springdoc.openapi}</version>
        </dependency>
        

这是我的过滤器文件的代码

@Component
public class RequestResponseFilter extends OncePerRequestFilter{
    
    @Inject
    private AuthService authService;


@Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        
        if(request.getServletPath().contains(ApiResource.PING)) {
            response.setStatus(HttpServletResponse.SC_OK);
                return;
                
        }else if(request.getServletPath().contains("swagger-ui.html")){
            //return;
        }else if(request.getServletPath().contains("swagger-ui/index.html")){
            //return;
        }
        
        else {
        
             // Get the HTTP Authorization header from the request
            final String authorizationHeader = request.getHeader(HttpHeaders.AUTHORIZATION);
    
            final boolean authStatus = authService.authenticate(authorizationHeader);
            if (!authStatus) {
                response.sendError(HttpServletResponse.SC_UNAUTHORIZED, 
                        "REST signature failed validation.");
                    return;
            }
        }
        filterChain.doFilter(request, response);
        
    }

}

我尝试添加我的招摇网址,正如您在 else 条件下看到的那样(作为一种解决方法),但这也不起作用..

任何帮助将不胜感激。

TIA

【问题讨论】:

    标签: java spring-boot filter swagger


    【解决方案1】:

    为了忽略特定的 URL,我们需要 @OverrideshouldNotFilterOncePerRequestFilter 的方法。

    我用下面的代码更新了我的配置。

    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    import javax.servlet.FilterChain;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.stereotype.Component;
    import org.springframework.web.filter.OncePerRequestFilter;
    
    @Component
    public class AuthenticationFilter extends OncePerRequestFilter {
    
        private List<String> excludeUrlPatterns = new ArrayList<String>(Arrays.asList("/swagger-ui.html",
                "/swagger-uui.html", "/webjars/springfox-swagger-ui/springfox.css",
                "/webjars/springfox-swagger-ui/swagger-ui-bundle.js", "/webjars/springfox-swagger-ui/swagger-ui.css",
                "/webjars/springfox-swagger-ui/swagger-ui-standalone-preset.js",
                "/webjars/springfox-swagger-ui/springfox.js", "/swagger-resources/configuration/ui",
                "/webjars/springfox-swagger-ui/favicon-32x32.png", "/swagger-resources/configuration/security",
                "/swagger-resources", "/v2/api-docs",
                "/webjars/springfox-swagger-ui/fonts/titillium-web-v6-latin-700.woff2",
                "/webjars/springfox-swagger-ui/fonts/open-sans-v15-latin-regular.woff2",
                "/webjars/springfox-swagger-ui/fonts/open-sans-v15-latin-700.woff2",
                "/webjars/springfox-swagger-ui/favicon-16x16.png"));
    
        @Override
        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
                throws ServletException, IOException {
            System.out.println("Once per request filter is executed.");
        }
    
        @Override
        protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
            String path = request.getRequestURI();
            if (excludeUrlPatterns.contains(path)) {
                return true;
            } else {
                return false;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-11
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 2015-09-23
      • 1970-01-01
      相关资源
      最近更新 更多