spring security踩的一个小坑

今天遇到的一个spring security的bug

在做多线程导入的时候 response.getWriter().flush导致cookie的登录token被清空,

主要是由于spring security是每次都从当前线程上下文拿信息,在flush的时候由于是多开了线程,因此cookie被清掉了,解决办法是拿到当前Security上下文(SecurityUtils.runInThread)并set到当前线程中,这样子就不会了

public static Runnable runInThread(Runnable runnable){
SecurityContext ctx = SecurityContextHolder. getContext ();
try {
return ()->{
SecurityContextHolder. setContext (ctx);
runnable.run();
};
} finally {
SecurityContextHolder. clearContext ();
}
}


你可能感兴趣的:(spring,boot)