在 Spring Boot 2.6.4 上,此方法已被弃用。
public ConcurrentKafkaListenerContainerFactory<Object, Object> kafkaListenerContainerFactory(
ConcurrentKafkaListenerContainerFactoryConfigurer configurer) {
var factory = new ConcurrentKafkaListenerContainerFactory<Object, Object>();
configurer.configure(factory, consumerFactory());
// deprecated
factory.setErrorHandler(new GlobalErrorHandler());
return factory;
}
Run Code Online (Sandbox Code Playgroud)
全局错误处理程序类
public class GlobalErrorHandler implements ConsumerAwareErrorHandler {
private static final Logger log = LoggerFactory.getLogger(GlobalErrorHandler.class);
@Override
public void handle(Exception thrownException, ConsumerRecord<?, ?> data, Consumer<?, ?> consumer) {
// my custom global logic (e.g. notify ops team via slack)
}
}
Run Code Online (Sandbox Code Playgroud)
这个的替代样本是什么?文档说我应该使用setCommonErrorHandler
,但是如何实现该CommonErrorHandler
接口,因为那里没有可以重写的方法。
要点是,我必须根据特定条件向运营团队发送松弛通知(消息 tpye,可在 kafka 消息头中找到)
这并不是阻塞,只是一条烦人的已弃用消息。谢谢
我有几个地方有重复的代码,因为 BoxDecoration
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.circular(5),
boxShadow: [
BoxShadow(
color: Theme.of(context).hintColor.withOpacity(0.15),
offset: Offset(0, 3),
blurRadius: 10)
],
),
Run Code Online (Sandbox Code Playgroud)
所以我想将其提取BoxDecoration
到单独的 dart 文件中并重新使用。
就像是
static const boxDecoration = BoxDecoration(...);
Run Code Online (Sandbox Code Playgroud)
然后使用它
final container = Container(
decoration: boxDecoration
)
Run Code Online (Sandbox Code Playgroud)
但是我遇到了一些问题: 1. 如果我把它放在只包含常量的文件中,我仍然需要访问context
,例如 in Theme.of(context).primaryColor
,它只能从build(Context)
方法 2 中检索。然后,我创建了一个新的无状态小部件
import 'package:flutter/material.dart';
class FlutterTemplateStyle extends StatelessWidget {
static var boxDecoration;
@override
Widget build(BuildContext context) {
boxDecoration = BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.circular(5),
boxShadow: [
BoxShadow(
color: Theme.of(context).hintColor.withOpacity(0.15),
offset: Offset(0, …
Run Code Online (Sandbox Code Playgroud) 发现这两个问题:这里和这里,但我仍然不太明白。我仍然有(意外的?)行为。
我尝试使用此配置来记录紧凑的 kafka 主题
kafka-topics.sh --bootstrap-server localhost:9092 --create --partitions 1 --replication-factor 1 --topic test1 --config "cleanup.policy=compact" --config "delete.retention.ms=1000" --config "segment.ms=1000" --config "min.cleanable.dirty.ratio=0.01" --config "min.compaction.lag.ms=500"
然后我发送这些消息,每条消息至少有1秒的间隔
A: 3
A: 4
A: 5
B: 10
B: 20
B: 30
B: 40
A: 6
Run Code Online (Sandbox Code Playgroud)
我期望的是几秒钟后(配置为 1000?),当我运行时kafka-console-consumer.sh --bootstrap-server localhost:9092 --property print.key=true --topic test1 --from-beginning
,我应该得到
A: 6
B: 40
Run Code Online (Sandbox Code Playgroud)
相反,我得到:
A: 5
B: 40
A: 6
Run Code Online (Sandbox Code Playgroud)
如果我发布另一条消息B:50
并运行消费者,我得到:
B: 40
A: 6
B: 50
Run Code Online (Sandbox Code Playgroud)
而不是预期的
A: 6
B: …
Run Code Online (Sandbox Code Playgroud) 来自OWASP 页面:CSRF 攻击有效,因为浏览器请求会自动包含所有 cookie,包括会话 cookie。
为了防止它,我们可以使用双重提交 cookie 哈希。
在我找到的一些示例代码中,基本上找到了这个算法。
受害者访问应用程序:
攻击者:
双重提交 cookie 应该可以防止这种攻击,因为攻击者还需要在 HTTP 标头中提供有效的 CSRF 令牌。
我还是不明白:如果浏览器请求自动包含所有 cookie,这意味着点击恶意链接,登录 cookie 和 CSRF-token cookie 也会包含在内,攻击者会窃取它们。
那么攻击者只需要从CSRF-token cookie中提取值,并创建自己的API访问,使用他窃取的登录cookie和提取值的CSRF HTTP标头?
我错过了什么吗?
谢谢