为了账号安全,请及时绑定邮箱和手机立即绑定

springboot普通类中如何获取session?

springboot普通类中如何获取session?

慕哥6287543 2019-05-23 20:00:11
在springboot项目中有一个消息处理类,要在其中获取到httpSession,用@Autowired获取不到。publicclassTMessageHandlerFactoryimplementsMessageHandlerFactory{@AutowiredprivateHttpSessionsession;@Overridepublicvoiddata(InputStreamdata){intuserId=(int)session.getAtrribute("key");//这里的session为空....//插入数据}}如果用构造函数传过来也不行。@ComponentpublicclassSMTPRunnerimplementsApplicationRunner{@AutowiredprivateUserServiceuserService;//不明白为什么这个可以获取到@AutowiredprivateHttpSessionsession;//这个却不行@Overridepublicvoidrun(ApplicationArgumentsapplicationArguments)throwsException{TMessageHandlerFactorymyFactory=newTMessageHandlerFactory(session);....}}即使使用SpringBeanFacotryUtil(implementsApplicationContextAware)也不行。@ComponentpublicclassSpringBeanFactoryUtilimplementsApplicationContextAware{privatestaticApplicationContextapplicationContext;@OverridepublicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{if(SpringBeanFactoryUtil.applicationContext==null){SpringBeanFactoryUtil.applicationContext=applicationContext;}}//获取applicationContextpublicstaticApplicationContextgetApplicationContext(){returnapplicationContext;}//通过name获取Bean.publicstaticObjectgetBean(Stringname){returngetApplicationContext().getBean(name);}//通过class获取Bean.publicstaticTgetBean(Classclazz){returngetApplicationContext().getBean(clazz);}//通过name,以及Clazz返回指定的BeanpublicstaticTgetBean(Stringname,Classclazz){returngetApplicationContext().getBean(name,clazz);}}这种方法只能获取到自定义的bean(UserService这种),获取不到HttpSession这种Bean。应该如何做呢?可以给个比较详细的代码吗?网上的资料试了都不太行。
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

//获取到当前线程绑定的请求对象HttpServletRequestrequest=((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();//已经拿到session,就可以拿到session中保存的用户信息了。System.out.println(request.getSession().getAttribute("userInfo"));
我猜楼主你是需要这个
                            
查看完整回答
反对 回复 2019-05-23
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

我发现其实不应该这样做,与session有关的操作,应该放在能获取到session的上下文中(如Controller中),而不应该放在一个单独的线程中,大概是因为项目的线程和context无关,所以线程中无法获取session。正确的做法应该是把和session有关的操作放到Controller中(或其他含有context的环境),再转移到线程进行处理。
                            
查看完整回答
反对 回复 2019-05-23
  • 2 回答
  • 0 关注
  • 11162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号