Est-ce que quelqu'un a réussi à intégrer RestEASY avec Spring Security et Spring Session? Je rencontre des problèmes avec ContextLoadListener. J'ai été capable d'intégrer RestEASY et Spring Security avec le web.xml suivant.RestEASY, Spring Security, Intégration de session de printemps
<web-app>
<display-name>Admin Service</display-name>
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/admin</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.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<listener>
<listener-class>org.jboss.resteasy.plugins.spring.SpringContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>AdminService</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.etouchpoint.admin.service.AdminApplication</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>AdminService</servlet-name>
<url-pattern>/admin/*</url-pattern>
</servlet-mapping>
Après avoir lu la documentation pour la session de printemps, le web.xml finirait regarder quelque chose comme ceci:
<web-app>
<display-name>Admin Service</display-name>
<!-- Context for Spring HttpSession -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/session.xml</param-value>
</context-param>
<!-- Context for RestEasy -->
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/admin</param-value>
</context-param>
<!-- Filter and Mapping for Spring Session -->
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Filter and Mapping for Spring Security -->
<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 for Spring Session -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Listeners for RestEasy -->
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<listener>
<listener-class>org.jboss.resteasy.plugins.spring.SpringContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>AdminService</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.etouchpoint.admin.service.AdminApplication</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>AdminService</servlet-name>
<url-pattern>/admin/*</url-pattern>
</servlet-mapping>
Le problème avec cette configuration est que sont 2 ContextLoadListeners qui n'est pas autorisé. Alors, j'ai essayé de créer une classe qui proviendrait de Spring Security et j'ajouterais Spring Session et RestEASY Context Listeners.
session Configuration:
@Configuration
@EnableJdbcHttpSession
public class SessionConfig {
@Bean
public PlatformTransactionManager transactionManager(final DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}}
ContextLoadListener:
public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {
public SecurityInitializer() {
super(SecurityConfig.class, SessionConfig.class, SpringContextLoaderListener.class);
}}
Cela ne fonctionne pas non plus. Vous finissez avec cette exception:
java.lang.NoSuchMethodException: org.springframework.security.access.SecurityConfig.<init>()
Je suis à une perte, au moment, de la façon d'obtenir ces 3 bibliothèques pour jouer bien. Est-ce que quelqu'un a fait ça? Quelle était la solution générale? Est-ce que vous déplacez tout en Java, ou êtes-vous capable de le faire en XML?