怎么配置UndertowServer的SessionManager?

@JFinal

自己实现了Undertow的SessionManager,怎么配置到UndertowServer里呢?

UndertowServer这个对象是在JFinal-undertow这个jar包里。

评论区

SuperEric

2021-02-26 16:16


1,新建一个SessionManagerFactory实现


public static class YourSessionManagerFactory implements SessionManagerFactory {
@Override
public SessionManager createSessionManager(Deployment deployment) {
return yoursessionManager;
}
}


2,在UndertowServer启动中配置上去.


UndertowServer.create(Xxx.class).configWeb(builder -> {   
builder.getDeploymentInfo().setSessionManagerFactory(new YourSessionManagerFactory());
}).start();






3,可能遇到的问题,如果session中保存有对象, request.getSession().getAttribute("xxx")转换时出现


java.lang.ClassCastException


的异常,请看看是否是由于ClassLoader不一致造成。常见如下:



com.jfinal.server.undertow.hotswap.HotSwapClassLoader@xaxx000



sun.misc.Launcher$AppClassLoader@9x9ssdf



简单粗暴的解决办法是关掉undertow开发模式,undertow.devMode=false

zzutligang

2021-02-27 12:58

@SuperEric,成功了,测试运行正常。这回分布式部署的session处理看起来就清爽多了,再也不需要自己定义拦截器了。分布式和单机在使用上完全没有区别了。

SuperEric

2021-02-27 13:58