我正在为一个项目研究Spring Boot,并且遇到了Spring Security的一个奇怪问题。应用程序配置为要求通过以下Java配置对所有URL进行身份验证:
http
.authorizeRequests()
.antMatchers("/**")
.authenticated()
我已经确认这适用于大多数视图:尝试访问localhost:8080 / test导致重定向到登录页面,该登录页面在登录之前拒绝访问(之后它正常工作)。但是,当我访问在上下文根(localhost:8080 /)上注册的视图时,这不会发生;我只是收到了视图。这个结果不是我所期望的,特别是因为使用传统Spring XML配置编写的另一个测试应用程序可以成功地要求在上下文根处使用以下行进行身份验证:
<security:intercept-url pattern="/**" access="isAuthenticated()" />
我可以设想一些解决方法(最简单的可能是根视图中的重定向标头),但似乎最小阻力的路径将正确配置Spring Security - 我在这里做错了什么?
编辑:如下面的评论所述,我尝试过.anyRequest(),. regexMatchers(&#34;。*&#34;),以及.antMatchers()的各种模式,包括**和/,以及似乎没有任何对上下文根本身有任何影响。
编辑2:我现在也成功地将war-packaged应用程序部署到非嵌入式Tomcat,并遇到了同样的问题;这似乎表明该问题不是嵌入式Tomcat服务器所独有的。
答案 0 :(得分:0)
好吧,我把这件事搞清楚了,我觉得自己有点像白痴。对于后代,这是我的实际问题:
我使用以下代码创建了登录表单和注销过程:
.formLogin()
.loginProcessingUrl("/login")
.loginPage("/auth")
.defaultSuccessUrl("/")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/")
.invalidateHttpSession(true);
.permitAll()
我没有意识到.permitAll()应用于登录和注销声明中的所有URL:/ login,/ auth,/ logout和/。一旦我在两个声明中注释掉了.permitAll()并在最初的.antMatchers()中添加了前三个,所有包含上下文根的路径都需要进行身份验证。