Spring安全性oauth实现中有一种常见的做法是使用以下行保护oauth端点:
.requestMatchers().antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access")
整个设置如下所示:
http
.formLogin().loginPage("/login").permitAll()
.and()
.requestMatchers().antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access")
.and()
.authorizeRequests().anyRequest().authenticated();
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么需要特定的行,因为下一行明确表示所有请求都必须经过身份验证吗?
虽然这似乎是一项容易的任务,但事实恰恰相反.我正在尝试自定义OAuth2客户端身份验证请求的错误处理.这样做的目的是从响应消息中删除异常堆栈跟踪/消息.
OAuth2ExceptionRenderer
创建一个@Bean
实例OAuth2AuthenticationEntryPoint
@Bean
public OAuth2AuthenticationEntryPoint clientAuthEntryPoint()
{
OAuth2AuthenticationEntryPoint clientEntryPoint = new OAuth2AuthenticationEntryPoint();
clientEntryPoint.setTypeName("Basic");
clientEntryPoint.setRealmName("my-realm/client");
clientEntryPoint.setExceptionRenderer(new CustomOAuth2ExceptionRenderer());
return clientEntryPoint;
}
Run Code Online (Sandbox Code Playgroud)创建访问被拒绝处理程序
@Bean
public OAuth2AccessDeniedHandler accessDeniedHandler()
{
OAuth2AccessDeniedHandler adh = new OAuth2AccessDeniedHandler();
adh.setExceptionRenderer(new CustomOAuth2ExceptionRenderer());
return adh;
}
Run Code Online (Sandbox Code Playgroud)AuthorizationServerSecurityConfigurer
除其他外,通过这些专门的实现来增强AuthorizationServerConfiguration
@Configuration
@EnableAuthorizationServer
protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter
{
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception
{
oauthServer.authenticationEntryPoint(clientAuthEntryPoint());
oauthServer.accessDeniedHandler(accessDeniedHandler());
oauthServer.realm("my-realm");
}
}
Run Code Online (Sandbox Code Playgroud)我们使用curl来启动OAuth2 reuqests.以下是我们用于测试客户端身份验证的命令:
curl --insecure -H "Accept: …
Run Code Online (Sandbox Code Playgroud) Kafka org.apache.kafka.clients.producer.internals.DefaultPartitioner
实现中有一个非常小但非常强大的细节,这让我很烦恼.
正是这行代码:
return DefaultPartitioner.toPositive(Utils.murmur2(keyBytes)) % numPartitions;
Run Code Online (Sandbox Code Playgroud)
更确切地说,是最后一个% numPartitions
.我一直在问自己,通过使分区ID成为现有分区数量的函数,引入如此巨大约束的原因是什么?只是为了方便小数字(人类可读/可追踪?!)与分区总数相比?这里有没有人对这个问题有更广泛的了解?
我问这个是因为在我们的实现中,我们用来在kafka中存储数据的密钥是域敏感的,我们使用它来基于kafka从kafka中检索信息.例如,我们的消费者只需要订阅那些对他们感兴趣的分区,而我们进行链接的方式就是使用这些密钥.
使用不进行模数操作的自定义分区程序会安全吗?我们是否应该注意到性能下降 这对生产者和/或消费者方面有什么影响吗?
欢迎任何想法和意见.