SecurityContextHolder.getContext()。当将url添加到WebSecurity配置时,getAuthenticated返回null

时间:2015-08-19 09:10:14

标签: java spring spring-security spring-boot spring-security-acl

我在我的应用程序中使用Spring Security,并且暴露了REST API。 API对尝试访问API的用户进行身份验证,并且我使用的是Spring的ACL实现(放置为注释PreAuthorize,PostAuthorize等)。

问题是,有些资源可以由未登录的用户访问,而某些资源的操作只能由登录用户使用。为了提供对未登录用户的访问,我已将这些URL添加到SecurityConfiguration类:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@ImportResource("classpath:acl-config.xml")
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring()
        .antMatchers("/api/v1/resource1")
        .antMatchers("/api/v1/resource2")
        ....

现在的问题是,每当有人访问resource1或resource2时,SecurityContextHolder.getContext()。getAuthentication()都会返回null。这导致了问题,因为我正在使用Spring的ACL实现,并且实现的源文件使用SecurityContextHolder.getContext()。getAuthentication()方法并获得null作为回报。所以ACL已经停止工作了。在我自己的代码中,我可以获得here所述的身份验证实例,但不能访问ACL的源文件。

我想在配置中做一些事情,所以即使我在SecurityConfiguration中提供url,我仍然可以获得SecurityContextHolder.getContext()。getAuthentication()instance。

0 个答案:

没有答案