2

У меня есть веб-приложение Apache Wiket + Spring, которое работает без каких-либо проблем. В настоящее время Spring использует рамки DI и фильтрует мобильный доступ. Мы планируем использовать Spring Rest в нашем приложении. Можете ли вы посоветовать мне, как мне это сделать в нашем существующем веб-xml.
Изначально Rest Api будет использоваться существующими веб-сеансами для доступа к данным (ui-страницы с использованием вызовов ajax). Поэтому я хочу, чтобы контроллеры Restore могли получить доступ к существующему сеансу Wicket http (если он был использован для входа в систему). , например. : вызов rest из существующего сеанса http должен иметь доступ к существующей сессии http. Любая идея? Спасибо и назначьте свое время.Как интегрировать Spring Rest с веб-приложением Apache Wicket

Моя идея состояла в том, чтобы использовать '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> 

ответ

4

решаемые для меня! Спасибо за мартин-г, направляя меня на 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 покоя все, что вам нужно сделать, это ниже например:

@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; 
    } 

И весна-отдых & Калитка жили долго и счастливо ....

+0

Также кредит тоже отправляется на это сообщение http://stackoverflow.com/questions/15764286/wicket -session-и-Джерси-отдых-вебсервис – csf

1

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

  1. https://github.com/apache/wicket/blob/8d23f188e8509e4fae945bbfb9710c489c57423c/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/WicketSessionFilter.java
+0

Спасибо martin-g, мне нужно добавить 'org.springframework.web.servlet.DispatcherServlet' в web.xml? потому что я пробовал делать это, однако все же я не могу видеть, как меня управляет сопоставление, используя функцию spring @RestController, которая запускается, я что-то пропустил здесь. – csf