java - 添加OncePerRequestFilter 是spring boot 应用程序后swagger 没有打开
问题描述
我已经在我的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);
}
}
我尝试添加我的招摇网址,正如您在其他情况下看到的那样(作为一种解决方法),但这也不起作用..
任何帮助,将不胜感激。
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;
}
}
}
推荐阅读
- amazon-web-services - AWS - 将网站的子目录重定向到另一个 Elastic Beanstalk 应用程序
- javascript - 如何从freemarker中的字符串获取url
- javascript - 如何在 JavaScript 中获取特殊字符串?
- scala - Spark - Java 中没有“Dataframe”类型
- javascript - 如何获得过滤功能以进一步过滤,而不是重新加载数据?
- javascript - 在 Javascript 代码中更改内部文本颜色
- c - 为什么这个 C 程序不在 Microsoft Visual Studio 上运行?
- reactjs - React Native - MongoDB 同步问题
- java - java.lang.SecurityException:签名者信息与PowerMock中同一个包中其他类的签名者信息不匹配
- c# - 使用 Mutex 的 C Sharp 多线程实现:顺序线程执行