IntelliJ IDEA 啟動時彈出錯誤對話框:Cannot open URL: https://localhost:8080/xxx,或項目運行後無法訪問任意端點,控制台無異常堆棧。
檢查 web.xml 或 Spring Security 配置,發現過濾器映射配置為 /* 且無排除規則,導致靜態資源、錯誤頁、Actuator 端點等所有請求均被攔截,甚至包含 IDEA 內部檢測請求。
<!-- web.xml 錯誤示例 -->
<filter>
<filter-name>authFilter</filter-name>
<filter-class>com.example.AuthFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>authFilter</filter-name>
<url-pattern>/*</url-pattern> <!-- 攔截所有路徑,含靜態資源、error頁、health端點 -->
</filter-mapping>
/api/*、/secure/*)。<filter-mapping>
<filter-name>authFilter</filter-name>
<url-pattern>/api/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>authFilter</filter-name>
<url-pattern>/secure/*</url-pattern>
</filter-mapping>
<!-- 或使用 Servlet 3.0+ @WebFilter 配合排除 -->
@WebFilter(urlPatterns = "/api/*", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD})
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/static/**", "/css/**", "/js/**", "/images/**", "/favicon.ico").permitAll()
.antMatchers("/actuator/health", "/actuator/info", "/error").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").permitAll()
.and()
.logout().permitAll();
}
}
| 檢查項 | 命中現象 | 修正動作 |
|---|---|---|
Filter url-pattern 是否為 /* | 所有請求 403/404/無響應 | 縮小攔截範圍或添加排除 |
Spring Security permitAll() 是否覆蓋靜態資源 | CSS/JS/圖片加載失敗 | 添加 antMatchers("/static/**").permitAll() |
錯誤頁 /error 是否放行 | 異常時白屏/無錯誤頁 | 添加 .antMatchers("/error").permitAll() |
| Actuator 端點是否放行 | IDEA/K8s 健康檢查失敗 | 添加 .antMatchers("/actuator/health").permitAll() |
Cannot open URL 多數由過濾器/安全配置過度攔截引起。遵循「最小權限原則」配置攔截路徑,顯式放行靜態資源、錯誤頁、健康檢查端點,可避免 90% 此類問題。調試時可暫時註釋過濾器驗證是否為配置問題。