我正在使用spring-boot-starter-web,以及embedded-jetty和starter-jersey starter。Jersey servlet的背景關系路徑在application.properties中被配置為來自/api的服務。所以所有的/api/.*呼叫都被處理到了Jersey。
由于我使用的是starter-web,靜態內容被從static/目錄中提供,如圖所示:
所有列在static/public/下的資源都可以不受任何限制地被訪問。但是static/private下的資源應該受到限制,只有在登錄的情況下才會顯示。
為了實作這一點,我寫了一個過濾器:
@Component
@Order(1)
public static class PrivateContentFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest。
if (request.getRequestURI().matches(".*/static/private/.*"/span>)) {
//檢查cookie中的認證并進行。
//該cookie被交給一個auth mirco-service,該服務進行實際驗證。
}
}
}
但是這個過濾器只有在路徑為api/.*時才能達到,而對于靜態內容則不能。/public/.*也不適用/private.*。我在這里錯過了什么?
uj5u.com熱心網友回復:
所有在/static下的東西都是背景關系/所以你的過濾器重碼必須是這樣的:
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest)servletRequest。
if (request.getRequestURI().matches("/private/.*"/span>)) {
System.out.println("private")。
} else {
System.out.println("public")。
}
filterChain.doFilter(servletRequest, servletResponse)。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/313470.html
標籤:

