我有Apache Wiket + Spring网络应用程序,没有任何问题。 目前Spring使用DI框架并过滤移动访问。 我们计划在我们的应用程序中使用Spring Rest,您能否告诉我如何在现有的web xml中执行此操作 最初Rest Api将被现有Web会话用于访问数据(使用ajax调用的ui页面),因此我希望Rest控制器能够访问现有的Wicket http会话(如果使用登录)。 例如:来自现有http会话的休息呼叫应该能够访问现有的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>
答案 0 :(得分:4)
为我解决了!感谢martin-g指导我WicketSessionFilter
。我在这里发布答案以供将来参考任何一个或建议(如果需要)..
我/我们在web.xml
&#39;除了上面发布的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/*
请求,这些请求按春季消耗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;
}
春季休息&amp; Wicket过着幸福的生活....
答案 1 :(得分:1)
由于Wicket的Filter和Spring的Servlet都在同一个web.xml中,因此它们将共享相同的 javax.servlet.HttpSession 。如果您需要能够在Spring的REST处理程序中访问Wicket的 org.apache.wicket.Session ,那么您将需要设置Wicket的WicketSessionFilter [1]。