Я использую GWT + Spring security.
Я нахожу в вашей конфигурации, есть некоторые недоразумения. На самом деле, существует очень простой способ, позволяющий весенней защите работать с вашим gwt независимо от gwt-инкубатора-безопасности . Вам просто нужно объявить контекст вашего приложения в вашем файле web.xml.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-security.xml</param-value>
</context-param>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Вы не объявляете здесь свой диспетчер MVCServlet! Тогда все работает благодаря механизму инфраструктуры Spring Security.
Но этот способ настройки не объявляет DispatcherServlet, он прост, но в случае, если вам нужна некоторая функциональность безопасности, для которой нужен DispatcherServlet, это «пирог». Итак, как я встретил.
Тогда, если вы настаиваете на использовании gwt-инкубатора-безопасности. Я прочитал очень хорошее решение на французском, но не снимайте отметку. http://hugo.developpez.com/tutoriels/java/gwt/utilisation-gwt-avec-spring-et-hibernate/
- Интеграция Spring в приложение с GWT-SL:
Фактически, для интеграции Spring и hibernate проблема состоит в том, как правильно настроить сервлет. Следует помнить, что Spring имеет свой собственный сервлет DispatcherServlet , так же как и gwt со своим «gwt servlet».
Обычно в руководстве по GWT RPC сервлет gwt объявляется в web-xml , например
<servlet>
<servlet-name>appService</servlet-name>
<servlet-class>com.google.gwt.app.example.server.AppServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>appService</servlet-name>
<url-pattern>/app/appService</url-pattern>
</servlet-mapping>
Если вам очень нравится Spring и вы хотите использовать DispatcherServlet для отправки запроса, то GWT-обработчик может помочь вам избавиться от проблемы.
Во-первых, вы загружаете контекст приложения в web.xml , как показано ниже:
<context-param>
<param-name> contextConfigLocation </param-name>
<param-value> classpath:applicationContext_GWT.xml </param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
Затем вы можете объявить вашу службу rpc в контексте Spring:
applicationContext_GWT.xml
<bean id=" appService "
class=" com.google.gwt.app.example.server.AppServiceImpl">
</bean>
Но вы не должны забыть добавить объявление GWTHandler в файл контекста приложения applicationContext_GWT.xml
И последнее, что нужно объявить весенним сервлетом: DispatcherServlet в web.xml Обратите внимание на тот факт, что это правильный сервлет пружины, а не GWT-SL.
web.xml
<servlet>
<servlet-name>handler</servlet-name>
<servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>handler</servlet-name>
<url-pattern>*.rpc</url-pattern>
</servlet-mapping>
Имя сервлета важно, потому что DispatcherServlet будет искать контекстный файл пружины с именем «* -servlet.xml». Поскольку имя сервлета - обработчик, он будет искать контекст весны «handler-servlet.xml». Итак, здесь мы решим проблему следующим образом: мы помещаем контекст приложения, который не зависит от DispatcherServlet, в «applicationContext_GWT.xml», а затем тот, который зависит от DispatcherServlet в «-servlet.xml», в качестве сервлета. имя - «обработчик», тогда мы должны иметь «handler-servlet.xml», затем поместить следующую конфигурацию GWT_SL из applicationContext_GWT.xml в handler-servlet.xml
Обработчик-servlet.xml
<bean id="urlProjectMapping" class="org.gwtwidgets.server.spring.GWTHandler">
<!-- Supply here mappings between URLs and services. Services must implement the RemoteService interface but are not otherwise restricted.-->
<property name="mappings">
<map>
<!-- Other mappings could follow -->
<entry key="/app/appService.rpc" value-ref="appService" />
</map>
</property>
</bean>
Затем добавьте следующую конфигурацию в web.xml dans la объявление de servlet.
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value> /WEB-INF/handler-servlet.xml </param-value>
</init-param>
Шаблон фильтра касается только вызова RPC с суффиксом .rpc
(Я не использовал GWT-SL, поэтому вышеописанный метод интеграции не был проверен.)
После того, как вы выполнили все вышеперечисленные настройки, вы создадите свою точку фильтра в контекстном файле приложения.
Надеюсь, это поможет вам!