我对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吗?如果是这样,有什么目的?
我试图尽可能精确。我希望有人能回复。 非常感谢你的帮助!
答案 0 :(得分:2)
您需要将其放入配置文件中:
http.authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll();
答案 1 :(得分:1)
您是否拥有未经身份验证的root权限'/'?我问这个是因为看起来像你打算用线:
.antMatchers("/").permitAll()
我想为了允许未经身份验证的请求(或匿名身份验证的请求,请注意,对于Spring Anonymous和未经身份验证的请求基本相同),您需要为这些路径添加ant匹配,例如:
.antMatchers("/public-page").permitAll()