我正在运行非常简单的
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清洁构建
运行它:
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") }
解决方法
你的过滤地图/ *所以你对索引的调用应该是
http://localhost:8080/index. 你怎么称索引?