如何将SpringREST与ApacheWicket web应用程序集成

如何将SpringREST与ApacheWicket web应用程序集成,wicket,web.xml,wicket-6,spring-restcontroller,spring-rest,Wicket,Web.xml,Wicket 6,Spring Restcontroller,Spring Rest,我有一个ApacheWiket+SpringWeb应用程序,可以正常工作。 目前Spring使用DI框架并过滤移动接入。 我们计划在应用程序中使用Spring Rest,您能告诉我如何在现有的web xml中使用Spring Rest吗。 最初,现有的Web会话将使用RESTAPI访问数据(使用ajax调用的ui页面),因此我希望Rest控制器能够访问现有的Wicket http会话(如果登录使用)。 e、 g:来自现有http会话的rest调用应该能够访问现有http会话。 有什么想法吗?谢谢

我有一个ApacheWiket+SpringWeb应用程序,可以正常工作。 目前Spring使用DI框架并过滤移动接入。 我们计划在应用程序中使用Spring Rest,您能告诉我如何在现有的web xml中使用Spring Rest吗。
最初,现有的Web会话将使用RESTAPI访问数据(使用ajax调用的ui页面),因此我希望Rest控制器能够访问现有的Wicket http会话(如果登录使用)。 e、 g:来自现有http会话的rest调用应该能够访问现有http会话。 有什么想法吗?谢谢并感谢您的时间

我的想法是使用“
org.springframework.web.servlet.DispatcherServlet
”和 标签,但我怀疑我是否希望以这种方式共享同一会话

我现有的
web.xml
(工作)


上下文配置位置
类路径:myapp-spring-config.xml
myapp
org.apache.wicket.protocol.http.WicketFilter
applicationFactoryClassName
org.apache.wicket.spring.SpringWebApplicationFactory
myappMobileRequestFilter
org.springframework.web.filter.DelegatingFilterProxy
myappMobileRequestFilter
/*
要求
错误
org.springframework.web.context.ContextLoaderListener
org.springframework.web.context.request.RequestContextListener

由于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>
    

    Spring rest&Wicket从此过着幸福的生活……

    谢谢martin-g,我需要在web.xml中添加“org.springframework.web.servlet.DispatcherServlet”吗?因为我试过这么做,但是我仍然看不到我使用spring@RestController的控制器映射被触发,我是不是遗漏了什么……这篇文章也值得赞扬
      <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>
    
    @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;
         }