如何将 Spring Rest 与 Apache Wicket Web 应用程序集成
How to integrate Spring Rest with Apache Wicket web application
我有 Apache Wiket + Spring Web 应用程序,可以正常运行。
目前 Spring 使用 DI 框架和过滤移动访问。
我们计划在我们的应用程序中使用 Spring Rest,你能告诉我如何在我们现有的网络中做到这一点 xml .
最初 Rest Api 将被现有的 Web 会话用来访问数据(ui 页面使用 ajax 调用),因此我希望 Rest 控制器能够访问现有的 Wicket http 会话(如果使用已登录) 。
例如: 来自现有 http 会话的 rest 调用应该能够访问现有的 http 会话。
任何的想法 ?谢谢并感谢您的宝贵时间。
我的想法是将“org.springframework.web.servlet.DispatcherServlet
”与
标记,但是我怀疑我想共享同一个会话吗?
我现有的web.xml
(工作)
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:myapp-spring-config.xml
</param-value>
</context-param>
<filter>
<filter-name>myapp</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationFactoryClassName</param-name>
<param-value>org.apache.wicket.spring.SpringWebApplicationFactory</param-value>
</init-param>
</filter>
<filter>
<filter-name>myappMobileRequestFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>myappMobileRequestFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
由于 Wicket 的过滤器和 Spring 的 Servlet 都在同一个 web.xml 中,因此它们将共享相同的 javax.servlet.HttpSession。如果您需要能够在 Spring 的 REST 处理程序中访问 Wicket 的 org.apache.wicket.Session,那么您将需要设置 Wicket 的 WicketSessionFilter [1].
帮我解决了!感谢 martin-g 将我引导至 WicketSessionFilter
。我在这里发布答案以供将来参考或建议(如果需要)..
在我的“web.xml
”中对上面发布的 web.xml
.
所做的更改 I/We
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>org.apache.wicket.protocol.http.servlet.WicketSessionFilter</filter-class>
<init-param>
<param-name>filterName</param-name>
<param-value>myapp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/rest/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
如您所见,我添加了一个 WicketSessionFilter
来过滤 /rest/*
请求,这些请求被 spring 消耗 spring DispatcherServlet
.
如果你想在 Spring 休息控制器中访问 spring 会话,你所要做的就是下面
例如:
@RestController
@RequestMapping("/service")
public class TestServiceController {
@RequestMapping(value = "/getValue/{name}", method = RequestMethod.GET)
@SuppressWarnings("unused")
public String getValue(@PathVariable String name,HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession(false);
WebSession wicketSession = session.getAttribute("wicket:wicket.myapp:session");
//rest of the code here ........
return result;
}
然后 Spring-rest & Wicket 从此过上了幸福的生活....
我有 Apache Wiket + Spring Web 应用程序,可以正常运行。
目前 Spring 使用 DI 框架和过滤移动访问。
我们计划在我们的应用程序中使用 Spring Rest,你能告诉我如何在我们现有的网络中做到这一点 xml .
最初 Rest Api 将被现有的 Web 会话用来访问数据(ui 页面使用 ajax 调用),因此我希望 Rest 控制器能够访问现有的 Wicket http 会话(如果使用已登录) 。
例如: 来自现有 http 会话的 rest 调用应该能够访问现有的 http 会话。
任何的想法 ?谢谢并感谢您的宝贵时间。
我的想法是将“org.springframework.web.servlet.DispatcherServlet
”与
标记,但是我怀疑我想共享同一个会话吗?
我现有的web.xml
(工作)
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:myapp-spring-config.xml
</param-value>
</context-param>
<filter>
<filter-name>myapp</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationFactoryClassName</param-name>
<param-value>org.apache.wicket.spring.SpringWebApplicationFactory</param-value>
</init-param>
</filter>
<filter>
<filter-name>myappMobileRequestFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>myappMobileRequestFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
由于 Wicket 的过滤器和 Spring 的 Servlet 都在同一个 web.xml 中,因此它们将共享相同的 javax.servlet.HttpSession。如果您需要能够在 Spring 的 REST 处理程序中访问 Wicket 的 org.apache.wicket.Session,那么您将需要设置 Wicket 的 WicketSessionFilter [1].
帮我解决了!感谢 martin-g 将我引导至 WicketSessionFilter
。我在这里发布答案以供将来参考或建议(如果需要)..
在我的“web.xml
”中对上面发布的 web.xml
.
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>org.apache.wicket.protocol.http.servlet.WicketSessionFilter</filter-class>
<init-param>
<param-name>filterName</param-name>
<param-value>myapp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/rest/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
如您所见,我添加了一个 WicketSessionFilter
来过滤 /rest/*
请求,这些请求被 spring 消耗 spring DispatcherServlet
.
如果你想在 Spring 休息控制器中访问 spring 会话,你所要做的就是下面 例如:
@RestController
@RequestMapping("/service")
public class TestServiceController {
@RequestMapping(value = "/getValue/{name}", method = RequestMethod.GET)
@SuppressWarnings("unused")
public String getValue(@PathVariable String name,HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession(false);
WebSession wicketSession = session.getAttribute("wicket:wicket.myapp:session");
//rest of the code here ........
return result;
}
然后 Spring-rest & Wicket 从此过上了幸福的生活....