今天我在配置 Spring Security 的OAuth是遇到了一个错误:
java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
需要注意一下几点:
1. 添加 spring-context 依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework.version}</version>
</dependency>
2. 注册 ContextLoaderListener
修改web.xml如下
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
注意,如果使用了Log4jConfigListener,需要把ContextLoaderListener放在后面。
3. 注意Spring Servlet 名称
参考OAuth 2 Developers Guide知道,我们需要在web.xml的securityFilterChain中添加如下配置:
<init-param>
<param-name>contextAttribute</param-name>
<param-value>org.springframework.web.servlet.FrameworkServlet.CONTEXT.spring</param-value>
</init-param>
特别需要注意的是:参数值最后的spring不是乱盖的,它要和SpringDispatchServlet的名称一致。