猿问

springboot普通类中如何获取session?

在springboot项目中有一个消息处理类,要在其中获取到httpSession,用@Autowired获取不到。
publicclassTMessageHandlerFactoryimplementsMessageHandlerFactory{
@Autowired
privateHttpSessionsession;
@Override
publicvoiddata(InputStreamdata){
intuserId=(int)session.getAtrribute("key");//这里的session为空
....//插入数据
}
}
如果用构造函数传过来也不行。
@Component
publicclassSMTPRunnerimplementsApplicationRunner{
@Autowired
privateUserServiceuserService;//不明白为什么这个可以获取到
@Autowired
privateHttpSessionsession;//这个却不行
@Override
publicvoidrun(ApplicationArgumentsapplicationArguments)throwsException{
TMessageHandlerFactorymyFactory=newTMessageHandlerFactory(session);
....
}
}
即使使用SpringBeanFacotryUtil(implementsApplicationContextAware)也不行。
@Component
publicclassSpringBeanFactoryUtilimplementsApplicationContextAware{
privatestaticApplicationContextapplicationContext;
@Override
publicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{
if(SpringBeanFactoryUtil.applicationContext==null){
SpringBeanFactoryUtil.applicationContext=applicationContext;
}
}
//获取applicationContext
publicstaticApplicationContextgetApplicationContext(){
returnapplicationContext;
}
//通过name获取Bean.
publicstaticObjectgetBean(Stringname){
returngetApplicationContext().getBean(name);
}
//通过class获取Bean.
publicstaticTgetBean(Classclazz){
returngetApplicationContext().getBean(clazz);
}
//通过name,以及Clazz返回指定的Bean
publicstaticTgetBean(Stringname,Classclazz){
returngetApplicationContext().getBean(name,clazz);
}
}
这种方法只能获取到自定义的bean(UserService这种),获取不到HttpSession这种Bean。应该如何做呢?可以给个比较详细的代码吗?网上的资料试了都不太行。
慕哥6287543
浏览 11163回答 2
2回答

手掌心

//获取到当前线程绑定的请求对象HttpServletRequestrequest=((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();//已经拿到session,就可以拿到session中保存的用户信息了。System.out.println(request.getSession().getAttribute("userInfo"));我猜楼主你是需要这个

慕尼黑的夜晚无繁华

我发现其实不应该这样做,与session有关的操作,应该放在能获取到session的上下文中(如Controller中),而不应该放在一个单独的线程中,大概是因为项目的线程和context无关,所以线程中无法获取session。正确的做法应该是把和session有关的操作放到Controller中(或其他含有context的环境),再转移到线程进行处理。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答