为何Spring Boot后端需配置静态资源访问权限?(Angular场景)
你的猜测完全正确,这个配置主要是为前后端打包部署到同一Spring Boot服务的场景设计的,具体原因可以拆成这几点:
部署阶段的资源托管需求:当你完成开发后,会把Angular项目打包成静态文件(执行
ng build生成dist目录),然后把这些文件放到Spring Boot项目的src/main/resources/static或public目录下。此时Spring Boot不仅提供REST API,还会作为静态资源服务器托管前端页面,/index.html、/login这些路径就是前端页面的入口,必须允许未登录用户访问——不然用户连登录页面都打不开,根本没法进行认证流程。单页应用的路由兼容:如果你的Angular应用使用HTML5 History模式(非Hash路由),当用户直接在浏览器输入
/home这类路由路径时,请求会发送到Spring Boot服务器。这时候需要Spring Boot把这些路由请求转发到index.html(让Angular的前端路由处理),而这个转发的前提是这些路径没有被Spring Security拦截,所以需要配置permitAll()放行。教程的完整性考量:教程是从完整的项目生命周期(开发到部署)出发编写的,虽然本地开发时前后端分离、用不到这些配置,但它提前覆盖了部署阶段的需求,避免你后续部署时还要回头补配置。
本地开发时你可以暂时忽略这些配置,或者保留也不会有负面影响——因为你的前端根本不会往Spring Boot服务发这些路径的请求,Spring Security的这些规则不会触发。
内容的提问来源于stack exchange,提问作者Luk

