ramostear.comramostear.com 谭朝红的技术分享博客

格言 编程是一门技术,也是一门艺术 !

在Spring Boot中使用过滤器

在Spring Boot中使用过滤器

Spring Boot (九)— 过滤器

过滤器被用于过滤应用程序的HTTP请求和响应,我们可以在请求发送到控制器之前对请求进行过滤,或者在响应发送到客户端之前进行过滤。在本章节中,通过一个简单的例子来展示在Spring Boot中如何使用过滤器,首先通过一张图来说明过滤器的使用步骤:

![](https://cdn.ramostear.com/2019-03-07-18-25-23-d1af3dce816741c39efe69da9618f3a6.png)![](https://cdn.ramostear.com/2019-03-07-18-25-23-d1af3dce816741c39efe69da9618f3a6.png)

1. 创建过滤器

在Spring Boot中,自定义的过滤器需要实现Filter接口中的方法,并使用@Component注解进行标注,具体代码如下:

package com.ramostear.application.filter;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * @author : ramostear
 * @date : 2019/3/7 0007-16:12
 */
@Component
public class UserServiceFilter implements Filter{

    private static final Logger logger = LoggerFactory.getLogger ( UserServiceFilter.class);

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
                         FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        logger.info ( "Request url : " + request.getRequestURL ());
        logger.info ( "Request method : "+request.getMethod ());
        filterChain.doFilter ( servletRequest,servletResponse );
    }

    @Override
    public void destroy() {}
}

在上述的代码中,当请求发送到控制器之前,过滤器生效,将从ServletRequest对象中读取请求的地址以及请求的方式。

2. 控制器类

接下来,定义一个简单的控制器,用于处理客户端发送的请求,本章节中的控制器我们沿用之前章节中的控制器:

package com.ramostear.application.controller;

import com.ramostear.application.model.User;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;

/**
 * @author : ramostear
 * @date : 2019/3/7 0007-16:28
 */
@RestController
public class UserServiceController {

    private static Map<Long,User> userRepo = new HashMap<> ();

    @PostConstruct
    public void initUserRepo(){
        User admin = new User ().setId ( 1 ).setName ( "admin" );
        userRepo.put ( admin.getId (),admin );

        User editor = new User ().setId ( 2 ).setName ( "editor" );
        userRepo.put ( editor.getId (),editor );
    }


    @GetMapping("/users")
    public ResponseEntity<Object> getUser(){
        return new ResponseEntity<> (userRepo.values (), HttpStatus.OK);
    }

}

getUser方法用于返回用户存储库中的所有用户信息,映射地址为:“/users”

3. 运行并测试

接下来,你可以使用Maven命令:mvn clean install名来创建一个jar文件,并使用java -jar jarfile命令来运行程序。下面是程序运行成功后的控制台窗口截图:

可以看到,我们的应用程序在Tomcat服务器上以8080端口启动成功。现在,打开Postman测试应用程序,以GET的方式打开请求地址:http://localhost:8080/users ,并观察返回的信息:

然后,你可以在控制台窗口中看到如下的输出信息:

(转载本站文章请注明作者和出处:谭朝红-ramostear.com,未经允许请勿做任何商业用途)

发表评论