如何在Rest Layer中获取会话并避免LazyInitialization Exception?

时间:2015-01-19 04:22:05

标签: java spring hibernate rest

f我的应用程序层基本上使用spring + jsf(2.0)和primeFaces(3.5)+ hibernate(4.3.5)。现在我们不得不采用一种新的方式来访问弹簧和jsf之外的DAO,我们创建了一个Rest路径。问题是:当我使用浏览器访问我的应用程序并首先登录时,一切正常,包括Rest访问DAO。问题是当我尝试在没有登录的情况下访问Rest时。我试图制作一个过滤器来拦截任何经过我写的/ rest / *路径的东西:

@Override
  public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
      throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest)arg0;
    HttpSession session = req.getSession(true);
    HttpSession session2 = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
    arg2.doFilter(arg0, arg1);
  }

但它不起作用,因为我得到的第一个会话不是我想要的会话(它在JSF上下文之外)并且第一次尝试从FacesContext获取会话给了我错误,因为我在JSF循环之外当我用* .jsf调用某个东西时开始......问题是我最终无法用.jsp调用我的Rest而且我无法在没有会话的情况下获得DAO所需的数据。有什么可以绕过这个问题吗?

1 个答案:

答案 0 :(得分:0)

我找到了使用@Transactional注释的解决方案。谢谢!