我有配置
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/**").authenticated()
.antMatchers("/shutdown").permitAll()
.and().formLogin().passwordParameter("password").usernameParameter("username")
.and().formLogin().loginPage("/authentication.html").permitAll()
.and().formLogin().loginProcessingUrl("/login")
.and().formLogin().failureUrl("/authentication.html")
.and().formLogin().defaultSuccessUrl("/",false);
身份验证工作完美,但我无法在没有身份验证的情况下访问/关闭。这可能是什么原因?
/ shutdown - 弹簧启动的关闭钩。
答案 0 :(得分:4)
如前所述,“/ **”表示任何请求,仅使用匹配的第一个模式。需要注意的一点是,您可以稍微清理一下配置。请参阅下面的清洁版:
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/shutdown").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/authentication.html")
.loginProcessingUrl("/login")
.failureUrl("/authentication.html")
.permitAll();
变化的重点:
答案 1 :(得分:1)
故意以这种方式设计。请参阅Spring Boot Guide中的Actuator endpoints description。并且有充分的理由。在没有任何安全性的情况下让关闭钩子保持打开是一个坏主意。任何知道该网址的人都可能会关闭您的应用程序。
答案 2 :(得分:0)
这是正常的。 Spring按顺序尝试模式,并在第一个匹配时停止。由于您的第一个模式是/**
,因此它会捕获所有模式,甚至不会分析下一个模式。你应该总是将catctll作为最后的模式:
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/shutdown").permitAll()
.antMatchers("/**").authenticated()
.and().formLogin().passwordParameter("password").usernameParameter("username")
.and().formLogin().loginPage("/authentication.html").permitAll()
.and().formLogin().loginProcessingUrl("/login")
.and().formLogin().failureUrl("/authentication.html")
.and().formLogin().defaultSuccessUrl("/",false);