我正在运行非常简单的spring-boot
应用程序:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
我有一个简单的过滤器:
@Component
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// This is getting called !
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// some logic
filterChain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
我有一个返回索引页的控制器:
@Controller
public class HomeController {
@RequestMapping("/")
public String index() {
return "index";
}
}
在请求索引页面时我的过滤器没有被调用,尽管我认为它应该被调用。
在我的日志中,我看到:
2016-07-18 11:59:51.840 INFO 15623 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'MyFilter' to: [/*]
我错过了什么?
修改 在这里发表评论之后,我看到我的控制器也没有被调用。所以这不是过滤器的问题,但这是一个更大问题的症状。
这是我的项目结构:
.
├── Dockerfile
├── build.gradle
├── gradlew
├── settings.gradle
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── mypackage
│ │ │ ├── Application.java
│ │ │ ├── GreetingController.java
│ │ │ ├── HomeController.java
│ │ │ └── MyFilter.java
│ │ └── resources
│ │ ├── application.yml
│ │ └── templates
│ │ ├── greeting.html
│ │ └── index.html
我正在使用gradle
构建一个jar文件:
./gradlew clean build
运行它:
java -jar build/libs/sample-webapp-1.0.0.jar
我正在调用http://localhost:8080
并获取index.html
文件(可能不会通过控制器)。
Spring版本为1.3.6-RELEASE
。
我build.gradle
的一部分:
buildscript {
repositories {
maven {
url "http://jcenter.bintray.com"
}
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.6.RELEASE")
}
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.boot:spring-boot-devtools")
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.6.2'
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.6.2'
compile group: 'org.bouncycastle', name: 'bcprov-jdk16', version: '1.46'
testCompile("junit:junit")
}
答案 0 :(得分:0)
您的过滤地图/*
因此您对索引的调用应为http://localhost:8080/index
你怎么称索引?
答案 1 :(得分:0)
我猜是tomcat的DefaultServlet接受它,您可以尝试在org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory#addDefaultServlet
添加断点,然后在org.apache.catalina.servlets.DefaultServlet#doGet
添加断点。
答案 2 :(得分:0)
所有类(包括控制器和过滤器)都应该位于包含Application.class文件的包下一层的包中。
答案 3 :(得分:0)
@Order(1000) -> 会为你完成工作
@Component
@Slf4j
@Order(1000)
public class `Class` implement Filter { } `enter code here`