我目前面临一个奇怪的问题,即IntelliJ无法处理我的代码。像这样:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
...
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(authenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
...
}
其中authenticationFilter
返回GenericFilterBean
的实例。这段代码很好地使用Gradle编译,但IntelliJ抱怨我的AuthenticationFilter
和UsernamePasswordAuthenticationFilter.class
与所需参数javax.servlet.Filter
和Class<? extends javax.servlet.Filter>
不匹配。
进一步检查后,似乎定义GenericFilterBean
的类文件没有看到javax.servlet
包,所以在我的文件中,它不知道它是什么。
另一个有趣的事情是spring-ws-core
依赖于spring-web:4.0.9.RELEASE
而我的代码依赖于spring-web:4.3.2.RELEASE
,当我查看4.3.2引用中的类时,它可以看到javax.servlet
,即GenericFilterBean
4.0.9休息,但4.3.2工作。
另外,如果我这样做
if (authenticationFilter() instanceof Filter);
if (new UsernameAuthenticationFilter() instanceof Filter);
IntelliJ说我可以用!= null
替换它们。
当我运行gradlew dependencies
时,我可以看到org.springframework:spring-beans:4.0.9.RELEASE -> 4.3.2.RELEASE
等依赖项,但IntelliJ会在Gradle Projects视图和项目引用中显示。
我的项目有一个多项目gradle构建,4.0.9依赖项在子项目上。
gradlew clean
)根据@Jens的建议,我将compile('javax.servlet:javax.servlet-api:3.1.0')
添加到allprojects
,现在IntelliJ可以正确地解析它,尽管最好不要对构建文件有“hacky”依赖。