Spring登录前无法加载CSS等静态资源,登录后恢复正常该如何解决?
问题根因
- 你的安全配置仅放行了
/resource/**路径下的资源,而页面实际引用的CSS、图片、JS等静态资源的访问路径不在该规则范围内(通常Spring Boot项目静态资源默认访问路径为/css/xxx.css、/images/xxx.png这类根路径开头的格式) - 「首次加载样式缺失、登录后登出样式正常」的现象逻辑如下:
首次访问登录页时处于未登录状态,未放行的静态资源请求命中
anyRequest().authenticated()规则被拦截,无法正常返回资源;登录后处于已认证状态,静态资源请求可以正常响应,资源会被缓存到浏览器本地,登出后再次访问登录页时浏览器直接读取本地缓存的资源,因此表现为样式正常。
修复方案
两种方案选其一即可,更推荐方案2:
- 方案1:在现有HttpSecurity配置中补充静态资源放行规则
修改你现有configure(HttpSecurity http)方法中的放行规则,补充所有静态资源对应的路径:
http.authorizeRequests() .antMatchers("/").permitAll() .antMatchers("/login").permitAll() // 新增静态资源路径放行 .antMatchers("/resource/**", "/css/**", "/js/**", "/images/**", "/static/**").permitAll() // 后续原有配置保持不变 .antMatchers("/roditelj/**").hasAuthority("roditelj") // ... 其余配置省略
- 方案2:重写WebSecurity配置方法,跳过静态资源的安全校验(性能更优)
在SecurityConfiguration类中新增如下方法:
@Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/css/**", "/js/**", "/images/**", "/static/**", "/resource/**"); }
验证提示
修改配置后先清理浏览器缓存,再首次访问登录页,若仍有异常可以打开浏览器开发者工具的「网络」标签,查看静态资源的实际请求路径和响应状态码,确认路径和放行规则是否匹配。
内容的提问来源于stack exchange,提问作者Developer
相关产品推荐
相关产品推荐

