有沒有人成功地將RestEASY與Spring Security和Spring Session集成?我遇到了ContextLoadListener的問題。我能夠將RestEASY和Spring Security與以下web.xml集成。RestEASY,Spring Security,Spring Session集成
<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>
閱讀文檔的春季會議後,在web.xml最終會看起來像這樣:
<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>
具有這種配置的問題是,有是2不允許的ContextLoadListeners。所以,我嘗試創建一個源自Spring Security的類,併爲其添加Spring Session和RestEASY Context Listeners。
會話配置:
@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);
}}
這也不起作用。你最終與此異常:
java.lang.NoSuchMethodException: org.springframework.security.access.SecurityConfig.<init>()
我很茫然,此刻如何獲得這3個庫發揮很好。有沒有人做過這個?什麼是通用解決方案?你把所有東西都移到Java中,還是你能用XML來完成?