Java Spring安全性,终结点上的配置权限检查不起作用
我的web应用程序有spring执行器和管理端点 在配置我的spring security时,我有以下代码:Java Spring安全性,终结点上的配置权限检查不起作用,java,spring,security,endpoint,actuator,Java,Spring,Security,Endpoint,Actuator,我的web应用程序有spring执行器和管理端点 在配置我的spring security时,我有以下代码: .and() .authorizeRequests() .antMatchers("/actuator/**", "/administration/**") .hasAuthority(Authority.ADMIN.name()) 这似乎不起作用,期望的结果是,只有拥有管理员权限的用户才能访问这些端点,现在,任何经过身份验证的用户都可以访问这些端点。我用一个拥有用户权限而不是
.and()
.authorizeRequests()
.antMatchers("/actuator/**", "/administration/**")
.hasAuthority(Authority.ADMIN.name())
这似乎不起作用,期望的结果是,只有拥有管理员权限的用户才能访问这些端点,现在,任何经过身份验证的用户都可以访问这些端点。我用一个拥有用户权限而不是管理员权限的用户做了这件事,它可以正常工作
这对我来说太危险了,我不想在当局可以管理的情况下设置密码保护
那么我如何确保只有具有管理员权限的用户才能访问以下端点?
我只发布了一小段代码,请告诉我您是否需要其他帮助:)
是的,我已经调试过了,在我的过程中权限设置正确,admin有auth-admin,它对基本auth和oauth2都有效。有人知道会发生什么吗
目前只有未登录的用户无法访问这些端点,以下是我的完整安全配置:
// @formatter:off
httpSecurity
.authorizeRequests()
.antMatchers(
Utils.MAPPING_INDEX,
Utils.MAPPING_ARTICLE,
Utils.MAPPING_IMAGE,
Utils.MAPPING_ERROR,
Utils.MAPPING_VERIFY_MAIL,
Utils.MAPPING_REGISTER,
Utils.MAPPING_LOGIN,
Utils.MAPPING_LOGIN_ERROR,
Utils.MAPPING_LOGIN_VERIFIED,
Utils.MAPPING_LOGIN_VERIFICATION_ERROR,
Utils.MAPPING_RESET_PASSWORD,
Utils.MAPPING_LOGIN_PASSWORD_RESET_SUCCESS,
Utils.MAPPING_LOGIN_PASSWORD_RESET_LOCKED,
Utils.MAPPING_RESET_PASSWORD_RESET_MAIL_SEND,
Utils.MAPPING_LOGIN_PASSWORD_RESET_FAILURE,
Utils.MAPPING_INDEX_LOGOUT_SUCCESS,
Utils.MAPPING_REGISTER_SUCCESS,
Utils.MAPPING_REGISTER,
Utils.MAPPING_RESET_PASSWORD,
Utils.MAPPING_RESET_PASSWORD_NEW_PASSWORD,
Utils.MAPPING_AUTHOR,
Utils.MAPPING_CONTACT,
Utils.MAPPING_CONTACT_SUCCESS,
Utils.MAPPING_CONTACT_FAILURE,
Utils.MAPPING_REPORT_WORKAROUND,
"/test",
"/test1",
"/frag1",
"/frag2",
"/css/**",
"/js/**",
"/img/**",
"/fonts/**",
"/external/**",
"/favicon.ico",
"/favicon_32.ico",
"/favicon.svg"
).permitAll()
.anyRequest().authenticated()
.and()
.authorizeRequests()
.antMatchers("/actuator/**", "/administration/**")
.hasAuthority(Authority.ADMIN.name())
.and()
.formLogin()
.loginPage(Utils.MAPPING_LOGIN)
.loginProcessingUrl(Utils.MAPPING_LOGIN)
.usernameParameter("email")
.passwordParameter("password")
.successHandler(basicAuthenticationSuccessHandlerImpl)
.failureUrl(Utils.MAPPING_LOGIN_ERROR)
.and()
.logout()
.logoutUrl(Utils.MAPPING_INDEX)
.logoutSuccessUrl(Utils.MAPPING_INDEX_LOGOUT_SUCCESS)
.invalidateHttpSession(true)
.and()
.oauth2Login()
.loginPage(Utils.MAPPING_LOGIN)
.successHandler(oauth2AuthenticationSuccessHandler);
// @formatter:on
}
不幸的是,这个问题在评论中得到了回答
我没有发布答案,所以我做了。一切都归功于戴纳姆先生
正确的解决办法是移动
.anyRequest().authenticated()
进入httpsecurity配置的最后一个位置。在这种情况下,排序很重要。规则的排序很重要,您的
.anyRequest().authenticated()
在执行器的更具体规则之前。因此,第一个匹配并使执行器
映射无效。切换顺序,确保“.anyRequest().authenticated()
是最后一个。天哪,它居然成功了。我不知道为什么,因为我一开始把admin和exactor端点完全放在顶部,然后设置了.anyRequest().authenticated(),现在我听了你的话,把它放在了最后一个位置(anyRequest().authenticated()),它就工作了。请将其作为答案发布,这样我就可以接受它,您就可以得到rep:)。