java - Controller 和过滤器已初始化但未被调用

标签 java servlets spring-boot

我正在运行非常简单的 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 :

@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: [/*]

我错过了什么?

在这里发表评论后,我发现我的 Controller 也没有被调用。所以这不是过滤器的问题,而是更大问题的征兆。

这是我的项目结构:

.
├── 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 文件(可能不通过 Controller )。

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")
}

最佳答案

你的过滤器映射 /* 所以你调用 index 应该是 http://localhost:8080/index .
怎么调用索引?

关于java - Controller 和过滤器已初始化但未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38432663/

相关文章:

java - 使用 Java 8 流对集合进行分组和排序

java - 模型属性存储在哪里?

java - Spring Security 默认登录表单无法加载 CSS 文件(ERR_CONNECTION_TIMED_OUT)

Spring 数据 jpa 规范 : How to filter a parent object by its children object property

java - 在 Jetty 中通过默认 servlet 提供静态资源

java - Spring 安全5 : There is no PasswordEncoder mapped for the id "null"

java - 读取不同长度的固定宽度文本文件

java - 如何使用JPA将多个​​枚举值保存到数据库?

java - INSERT .. SELECT 使用 JOOQ 在 MySQL 中使用一些默认值

java - 如何在 Jersey 容器中配置欢迎文件 (HTML/JSP)