小编nuc*_*tus的帖子

在spring security中使用requestMatchers().antMatchers()而没有动词的原因是什么?

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)

有人可以解释为什么需要特定的行,因为下一行明确表示所有请求都必须经过身份验证吗?

spring-security

8
推荐指数
2
解决办法
3971
查看次数

使用Spring Security在客户端身份验证上自定义OAuth2错误响应

虽然这似乎是一项容易的任务,但事实恰恰相反.我正在尝试自定义OAuth2客户端身份验证请求的错误处理.这样做的目的是从响应消息中删除异常堆栈跟踪/消息.

上下文

  • vanilla Oauth2 Spring Security实施
  • Java Spring配置

完成任务所采取的步骤

  1. 创建自定义实现 OAuth2ExceptionRenderer
  2. 创建一个@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)
  3. 创建访问被拒绝处理程序

    @Bean
    public OAuth2AccessDeniedHandler accessDeniedHandler()
    {
        OAuth2AccessDeniedHandler adh = new OAuth2AccessDeniedHandler();
        adh.setExceptionRenderer(new CustomOAuth2ExceptionRenderer());
        return adh;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 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)

OAuth2请求

我们使用curl来启动OAuth2 reuqests.以下是我们用于测试客户端身份验证的命令:

curl --insecure -H "Accept: …
Run Code Online (Sandbox Code Playgroud)

java oauth spring-security spring-security-oauth2

7
推荐指数
1
解决办法
3446
查看次数

Kafka DefaultPartitioner算法

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中检索信息.例如,我们的消费者只需要订阅那些对他们感兴趣的分区,而我们进行链接的方式就是使用这些密钥.

使用不进行模数操作的自定义分区程序会安全吗?我们是否应该注意到性能下降 这对生产者和/或消费者方面有什么影响吗?

欢迎任何想法和意见.

apache-kafka kafka-producer-api

5
推荐指数
1
解决办法
7224
查看次数