我正在开发一个Web应用程序,它分为两个主要部分,一个是应用程序的Wicket端,另一个是应用程序的Restlet端,它们是完全分离的。尽管代码位于同一个项目中,但我想将其解耦,所以Wicket调用了Restlet后端公开的REST服务。

现在的问题是会话,在Restlet部分中,有一个Shiro组件可以进行身份​​验证等。等当访问/login并提供正确的用户名和密码对时。

问题是,要使应用程序的Wicket部分知道当前使用Shiro登录Restrest部分的会话用户有什么方法?

最佳答案

如果您的Restlet服务器部件与Wicket应用共享容器提供的相同Web会话,则可以使用以下方法在Wicket中访问它:

((HttpServletRequest) RequestCycle.get().getRequest().getContainerRequest()).getSession()


这会给您Servlet api提供的javax.servlet.http.HttpSession。扩展了org.apache.wicket.protocol.http.WebSession的Wicket会话存储在该会话中的wicket:wicket.yourapp:session密钥下,以及您设置的其他数据或您在Wicket外部使用的库中。

我不了解Restlet以及如何在其中传播会话,但是我想您需要在Restlet / Shiro部分中依赖Servlet,该部分在会话中存储数据。

编辑:检查Shiros会话接口javadoc:
//A Session is intended to be managed by the business tier and accessible via other tiers without being tied to any given client technology. This is a great benefit to Java systems, since until now, the only viable session mechanisms were the javax.servlet.http.HttpSession or Stateful Session EJB's, which many times unnecessarily coupled applications to web or ejb technologies

考虑到这一点,上面的建议将不起作用,但是,如果将Shiro依赖项添加到Wicket部分中,听起来您应该能够轻松访问Shiros Session对象。

关于java - 从后端访问用户 session ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27237174/

10-12 05:01