【发布时间】:2018-01-06 04:53:49
【问题描述】:
我对 Spring Security 没有太多的专业知识,我有一个可能有点傻的问题。几天来我一直在尝试解决一个问题,也许我误解了配置我的应用程序的方式。如果有人能对此有所启发,我将不胜感激。
我用 Spring 实现了一个 REST API,我想给它增加安全性。从Spring Security docs 我读到... 采用“默认拒绝”通常被认为是良好的安全实践,您可以明确指定允许的内容并禁止其他所有内容。 ... 我同意。所以我将身份验证要求添加到我的配置中。
但是,我想公开(从我的 GUI)对 API 的调用,所以我认为匿名身份验证会起作用。同样,从我阅读的文档中...... “匿名身份验证”用户和未经身份验证的用户之间在概念上没有真正的区别 所以,一切都好。
但是,当我执行这些调用时,我会收到 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) 如果我不自定义匿名身份验证的配置,是否需要匿名()行?缺少身份验证时,匿名令牌就在那里(当我调试时)
3) 接受这些请求的配置中是否缺少任何内容?
4) 文档提到了 ExceptionTranslatorFilter,它应该将 AccessDeniedException 处理到 AuthenticationEntryPoint。我需要定义一个 AuthenticationEntryPoint 吗?如果有,目的是什么?
我尽量做到精确。我希望有人可以回复。 非常感谢您的帮助!
【问题讨论】:
-
你叫什么网址?您是否还可以在日志文件中添加异常的堆栈跟踪。它应该显示,如果它是一个角色问题,一个 CORS 问题,一个 CSRF 问题,......
标签: java spring security spring-security