Java Spring-匿名身份验证的访问被拒绝

Java Spring-匿名身份验证的访问被拒绝,java,spring,security,spring-security,Java,Spring,Security,Spring Security,我对Spring Security没有太多专业知识,我有一个问题可能有点傻。几天来我一直在试图解决一个问题,也许我误解了配置我的应用程序的方法。如果有人能给我介绍一下,我将不胜感激 我用Spring实现了一个RESTAPI,我想给它增加安全性。从我读到的。。。 通常认为,采用“默认拒绝”是一种良好的安全实践,在该实践中,您可以明确指定什么是允许的,什么是不允许的。 ... 我同意。因此,我将身份验证要求添加到配置中 但是,我想对API进行一些公共调用(从我的GUI),因此我认为匿名身份验证可以工

我对Spring Security没有太多专业知识,我有一个问题可能有点傻。几天来我一直在试图解决一个问题,也许我误解了配置我的应用程序的方法。如果有人能给我介绍一下,我将不胜感激

我用Spring实现了一个RESTAPI,我想给它增加安全性。从我读到的。。。 通常认为,采用“默认拒绝”是一种良好的安全实践,在该实践中,您可以明确指定什么是允许的,什么是不允许的。 ... 我同意。因此,我将身份验证要求添加到配置中

但是,我想对API进行一些公共调用(从我的GUI),因此我认为匿名身份验证可以工作。再一次,从我读到的文件中。。。 “匿名身份验证”用户和未经身份验证的用户在概念上没有真正的区别 所以,一切都很好

然而,当我执行这些调用时,我得到一个403响应(AbstractSecurityInterceptor在Decise on the Authentication上抛出一个AccessDeniedException)。所以,我在这里留下几个问题+我的配置行,以防你知道我有什么问题和误解

配置

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
    .csrf().disable()
    .cors().and()
    .anonymous().and()
    .authorizeRequests()
    .antMatchers("/").permitAll()
    .antMatchers(HttpMethod.POST, "/users/login").permitAll()
    .anyRequest().authenticated().and()

    // We filter the api/login requests
    .addFilterBefore(new JwtLoginFilter("/users/login", authenticationManager()),
            UsernamePasswordAuthenticationFilter.class)
    .addFilterBefore(new JwtAuthenticationFilter(),
            UsernamePasswordAuthenticationFilter.class);
}
问题。。。 1) AnonymousAuthenticationToken仍然经过身份验证,对吗

2) 如果我没有自定义匿名身份验证的配置,是否需要匿名()行?当身份验证丢失时,匿名令牌就在那里(当我调试时)

3) 在接受这些请求的配置中是否缺少任何内容

4) 文档中提到了ExceptionTranslatorFilter,它应该将AccessDeniedException处理到AuthenticationEntryPoint。我需要定义AuthenticationEntryPoint吗?如果是,目的是什么

我已经尽力做到尽可能精确。我希望有人能回复。
非常感谢你的帮助

您需要将其放入配置文件中:

http.authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll(); 

您是否具有对根“/”的未经验证的访问权限?我这样问是因为看起来这是你想要的:

.antMatchers(“/”).permitAll()

我想为了允许未经身份验证的请求(或匿名身份验证的请求,请注意,对于Spring anonymous和unauthenticated,两者基本相同),您需要为这些路径添加ant匹配项,例如:

.antMatchers(“/public page”).permitAll()

你好@Akash,谢谢你的回复!我认为期权方法不是问题所在。事实上,我收到的选项状态是200,但GET方法的状态是403。@MarcLoan选项将适用于所有类型(GET、POST、PUT、DELETE)您调用什么URL?您还可以在日志文件中添加异常的堆栈跟踪吗。如果这是一个角色问题,一个CORS问题,一个CSRF问题,它应该表明……完全正确@ramon rius!解决方案是前面的答案和您的答案的混合。表达式必须为“/**”(或您希望允许访问的特定模式)