Trong ứng dụng khởi động mùa xuân của tôi, tôi có nhiều điểm cuối tại /api/**
. Sau đây là cấu hình ứng dụng của tôi:Mùa xuân để phân biệt khách truy cập trình duyệt từ các cuộc gọi API đến điểm cuối
@Configuration
public class AppConfig extends WebMvcConfigurerAdapter {
private class PushStateResourceResolver implements ResourceResolver {
private Resource index = new ClassPathResource("/public/index.html");
private List<String> handledExtensions = Arrays.asList("html", "js",
"json", "csv", "css", "png", "svg", "eot", "ttf", "woff",
"appcache", "jpg", "jpeg", "gif", "ico");
private List<String> ignoredPaths = Arrays.asList("^api\\/.*$");
@Override
public Resource resolveResource(HttpServletRequest request,
String requestPath, List<? extends Resource> locations,
ResourceResolverChain chain) {
return resolve(requestPath, locations);
}
@Override
public String resolveUrlPath(String resourcePath,
List<? extends Resource> locations, ResourceResolverChain chain) {
Resource resolvedResource = resolve(resourcePath, locations);
if (resolvedResource == null) {
return null;
}
try {
return resolvedResource.getURL().toString();
} catch (IOException e) {
return resolvedResource.getFilename();
}
}
private Resource resolve(String requestPath,
List<? extends Resource> locations) {
if (isIgnored(requestPath)) {
return null;
}
if (isHandled(requestPath)) {
return locations
.stream()
.map(loc -> createRelative(loc, requestPath))
.filter(resource -> resource != null
&& resource.exists()).findFirst()
.orElseGet(null);
}
return index;
}
private Resource createRelative(Resource resource, String relativePath) {
try {
return resource.createRelative(relativePath);
} catch (IOException e) {
return null;
}
}
private boolean isIgnored(String path) {
return false;
// return !ignoredPaths.stream().noneMatch(rgx -> Pattern.matches(rgx, path));
//deliberately made this change for examining the code
}
private boolean isHandled(String path) {
String extension = StringUtils.getFilenameExtension(path);
return handledExtensions.stream().anyMatch(
ext -> ext.equals(extension));
}
}
}
các quyền truy cập vào thiết bị đầu cuối phía sau /api/**
được kiểm tra phải được xác thực, do đó khi tôi gõ vào /api/my_endpoint
trong trình duyệt, tôi nhận được lỗi trở lại, mà không phải là những gì tôi muốn. Tôi muốn người dùng được phục vụ với index.html
.
Bạn có thể sử dụng bộ chặn hoặc bộ lọc cho tất cả yêu cầu và kiểm tra phản hồi và đường dẫn và hành động theo đúng cách, đúng không? – DvTr