Как интегрировать Spring Rest с веб-приложением Apache Wicket

У меня есть веб-приложение Apache Wiket + Spring, которое работает без проблем. В настоящее время Spring использует структуру DI и фильтрацию мобильного доступа. Мы планируем использовать Spring Rest в нашем приложении. Не могли бы вы посоветовать мне, как мне это сделать в нашем существующем веб-xml.
Изначально Rest Api будет использоваться существующими веб-сеансами для доступа к данным (страницы пользовательского интерфейса с использованием вызовов ajax), Поэтому я хочу, чтобы контроллеры Rest могли получить доступ к существующему сеансу Wicket http (если он используется в системе). например Вызов: rest из существующего сеанса 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>


person csf    schedule 21.08.2015    source источник


Ответы (2)


Решено за меня! Спасибо за то, что направили меня к 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/* запросов, которые потребляют весной DispatcherServlet.

и если вы хотите получить доступ к весеннему сеансу в контроллере Spring rest, все, что вам нужно сделать, это ниже, например:

@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 жили долго и счастливо ....

person csf    schedule 27.08.2015
comment
Также кредит также относится к этому сообщению stackoverflow.com / questions / 15764286 / - person csf; 27.08.2015

Поскольку и фильтр Wicket, и сервлет Spring находятся в одном файле web.xml, они будут использовать один и тот же javax.servlet.HttpSession. Если вам нужно иметь доступ к org.apache.wicket.Session Wicket в обработчиках REST Spring, вам необходимо настроить WicketSessionFilter [1] Wicket.

  1. https://github.com/apache/wicket/blob/8d23f188e8509e4fae945bbfb9710c489c57423c/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/Wickterjession
person martin-g    schedule 22.08.2015
comment
Спасибо martin-g, мне нужно добавить org.springframework.web.servlet.DispatcherServlet в web.xml? потому что я пытался это сделать, но я все еще не вижу, как срабатывает отображение моего контроллера с использованием spring @RestController, я что-то здесь упускаю ... - person csf; 24.08.2015