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

时间:2017-07-30 16:17:13

标签: java spring security spring-security

我对Spring Security没有多少专业知识,我有一个可能有点傻的问题。我已经尝试解决问题几天了,也许我误解了配置我的应用程序的方法。如果有人能为此带来一些启发,我将不胜感激。

我用Spring实现了一个REST API,我想为它添加安全性。从Spring Security docs我读到...... 通常认为采用"默认拒绝"是一种良好的安全措施。您明确指定允许的内容并禁止其他所有内容。 ... 我同意。所以我在配置中添加了身份验证要求。

但是,我想对API公开(从我的GUI)调用很少,所以我认为匿名身份验证可以正常工作。再次,从我读到的文档...... 在匿名身份验证的用户之间没有真正的概念差异"和未经身份验证的用户 所以,一切都很好。

但是,当我执行这些调用时,我得到403响应(AbstractSecurityInterceptor在决定身份验证时抛出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)如果我不自定义匿名身份验证的配置,是否需要anonymous()行?缺少身份验证时,匿名令牌(当我调试时)

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

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

我试图尽可能精确。我希望有人能回复。 非常感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您是否拥有未经身份验证的root权限'/'?我问这个是因为看起来像你打算用线: .antMatchers("/").permitAll()

我想为了允许未经身份验证的请求(或匿名身份验证的请求,请注意,对于Spring Anonymous和未经身份验证的请求基本相同),您需要为这些路径添加ant匹配,例如: .antMatchers("/public-page").permitAll()