gpt4 book ai didi

java - 添加 OncePerRequestFilter 后 swagger 未打开是 spring boot 应用程序

转载 作者:行者123 更新时间:2023-12-05 06:14:25 27 4
gpt4 key购买 nike

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

我在我的 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);

}

}

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

如有任何帮助,我们将不胜感激。

TIA

最佳答案

为了忽略特定的 URL,我们需要 @Override shouldNotFilter 方法 OncePerRequestFilter

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

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;
}
}
}

关于java - 添加 OncePerRequestFilter 后 swagger 未打开是 spring boot 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62900796/

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