- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 wicket-6 应用程序部署到 kubernetes 集群中,以提高可用性并更好地分配 Web 应用程序的负载。
从我扩展 AuthenticatedWebSession 的意义上来说,这是一个有状态的 Web 应用程序。我希望将这个 session 对象存储在 Apache Ignite 等分布式缓存中,这样我的负载均衡器上就不需要粘性 session 。
问题是我的实现将 AuthenticationManager 注入(inject)到 AuthenticatedWebSession 中,因此 authManager 可以在authenticate(用户名,密码)方法中使用。
@SpringBean(name = "webAuthenticationManager")
private AuthenticationManager authManager;
@Override
public boolean authenticate(String username, String password) {
boolean authenticated = false;
try {
authentication = authManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
authenticated = true;
} catch (AuthenticationException e) {
authenticated = false;
}
return authenticated;
}
Caused by: org.apache.ignite.binary.BinaryObjectException: Failed to read field [name=authManager]
at org.apache.ignite.internal.binary.BinaryFieldAccessor.read(BinaryFieldAccessor.java:192)
at org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:875)
当 Ignite 尝试序列化/反序列化 authManager 字段时,会出现此问题。实际上我不需要将管理器本身存储在缓存中。
当 session 从缓存恢复时,有没有办法重新注入(inject)该对象?
也许我的处理方式完全错误。感觉就像我掉进了兔子洞:)
最佳答案
因为它是一个 @SpringBean,所以该实例是一个 java.lang.reflect.Proxy 或 CGLIB 代理。代理很容易序列化(反序列化),因为它们不将真实实例保留为硬引用。他们通过 Spring 的应用程序上下文动态查找 Spring bean。请参阅 wicket-spring 模块中类的来源。他们只是其中的一小部分。如果 Ignite 使用普通的 Java 序列化,那么它应该可以工作,但也许有一些自定义的东西。
关于java - 如何将经过身份验证的 WebSession 存储在分布式内存缓存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55997555/
我是一名优秀的程序员,十分优秀!