Java Spring安全默认登录表单无法加载CSS文件(错误\u连接\u超时\u)
看起来SpringSecurity的默认登录页面使用bootstrap.min.css和signin.css来设置自己的样式。从Eclipse运行项目时,登录页面显示正确,但从SpringBoot胖jar运行时,登录页面显示不正确。错误是:Java Spring安全默认登录表单无法加载CSS文件(错误\u连接\u超时\u),java,css,spring-boot,spring-security,login,Java,Css,Spring Boot,Spring Security,Login,看起来SpringSecurity的默认登录页面使用bootstrap.min.css和signin.css来设置自己的样式。从Eclipse运行项目时,登录页面显示正确,但从SpringBoot胖jar运行时,登录页面显示不正确。错误是: Failed to load resource: net::ERR_CONNECTION_TIMED_OUT bootstrap.min.css Failed to load resource: net::ERR_CONNECTION_TIMED_OUT s
Failed to load resource: net::ERR_CONNECTION_TIMED_OUT bootstrap.min.css
Failed to load resource: net::ERR_CONNECTION_TIMED_OUT signin.css
这些文件由SpringSecurity管理,我甚至不知道它们存储在哪里。正如我所说,当从Eclipse运行时,登录页面可以完美地工作,而应用程序的其余部分在这两种环境中都可以完美地工作(thymeleaf模板使用带Spring MVC后端控制器的引导,由Spring Security保护)
是什么导致了这些错误?您是否对要服务的静态资源使用了匹配器 如果本地资源位于默认位置以外的位置(不推荐)
http
.authorizeRequests()
.antMatchers("/lib/bootstrap/**",
"/css/**",
"/img/**",
"/js/**").permitAll();
如果是webjar
http
.authorizeRequests()
.antMatchers("/webjars/**").permitAll();
您甚至想保护使用登录限制服务这些资源吗?目的何在
对于默认已知目录中的静态资源:
虽然这对你们中那些已经被遗忘的人来说可能不是一个新的启示
自SpringOne发布以来,在SpringBoot之后,有一个
您可能不知道的细节。弹簧启动将自动启动
添加位于以下任意位置的静态web资源
目录:
/META-INF/resources/
/resources/
/static/
/public/
如果将这些文件添加到项目结构的其中一个defaut位置,则无需向它们授权请求
请参阅此以了解更多详细信息
NB:当使用spring的默认页面时,您不能拥有独立的环境,并且必须对laod资源进行internet访问。你必须实现你的定制
如果需要,请不要忘记链接您的spring安全规则您是否授权了对这些元素的请求?您使用的是什么版本的spring安全?您是否使用任何防火墙,不允许您从internet下载文件?事实上,我部署的环境无法访问internet。有没有办法让SpringSecurity在本地加载这些样式表?这些文件不在我的控制之下,它们似乎以某种方式包含在SpringSecurity中。因此,我不能授权他们提出请求。另外,我在从Eclipse运行时没有这个问题,只有在运行jar时才有。因此,当我从Eclipse运行项目时,一切正常,登录页面有样式,并且不需要30秒就可以重新加载。当我在生产环境中部署构建过程产生的jar文件并从批处理文件(java-jar)运行它时,我遇到了这个问题,它抱怨说它找不到我以前从未见过的CSS文件。这些不是我的CSS文件,它们以某种方式与Spring Security捆绑在一起,因此我无法明确授权它们,因为它们实际上没有位置。jar依赖项与我从IDE运行它时的依赖项相同。在我的视图中,我确实使用了引导,但它们工作得非常好。SpringSecurity的默认登录页面似乎指向bootstrap.min.css和signin.css,它以某种方式提供了它们自己,而这在从jar运行时是不起作用的。登录页面的工作原理与功能相同,但它以非样式HTML显示,加载需要30秒。老实说,我不认为我的项目结构在这里有什么不同。我的问题归结为:如何让SpringSecurity使用本地CSS文件而不是在线CSS文件?我已经把两个文件放在我的静态文件夹中抱怨,它仍然在我的登机机上在因特网上寻找它们。我希望还有另外一种方式,我有点像默认登录页面的简单化外观,但是我开始考虑自己制作并完全避免这个问题。
http
.formLogin()
.loginPage("/login")
.permitAll();