spring boot实现过滤器Filter
1 . 创建两个controller
访问helloservlet时判断是否带token,如果不带token会被拦截,跳转到logout
helloservlet 类
@Slf4j
@WebServlet (value = {"/hello"})
public class helloservelt extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("hello-servlet");
log.info("aoligei");
}
}
logout类
@RestController
public class logoutservlet {
@GetMapping("/logout")
public String logout(){
return "拦住你了";
}
}
2 . 1 注解实现
2 . 1 .1 创建过滤类
//加入过滤器注解,拦截以“/api”开头的地址
@WebFilter("/api/*")
@Slf4j
public class tokenfilter implements Filter {
//重写 doFilter 方法
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//强转为 HttpServlet
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
//获取token
String token = request.getParameter("token");
//日志输入token到控制台
log.info("token:{}", token);
//判断是否带有token
if (token == null) {
//如果不带token 重定向到logout
response.sendRedirect("/logout");
}
//执行拦截
filterChain.doFilter(request, response);
}
}
2. 1 . 2 执行结果
2. 1 . 2 . 1 不带token
- 启动 浏览器访问
http://localhost:8080/api/hello

- 不带token被拦截到了,并且跳转到了 logou 下图是控制台输出

2. 1 . 2 . 2 带token
- 启动 浏览器访问
http://localhost:8080/api/hello?token=123456这里token 随意输入一串字符串即可


2 . 2 注解实现
2 . 2 .1 创建过滤器类
和2.1.1中的过滤器类区别就是少了@WebFilter("/api/*")注解
@Slf4j
public class tokenfilter implements Filter {
//重写 doFilter 方法
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//强转为 HttpServlet
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
//获取token
String token = request.getParameter("token");
//日志输入token到控制台
log.info("token:{}", token);
//判断是否带有token
if (token == null) {
//如果不带token 重定向到logout
response.sendRedirect("/logout");
}
//执行拦截
filterChain.doFilter(request, response);
}
}
2 . 2 .2 创建配置类
//spring boot 中配置类需要加这个注解
@Configuration
public class myconfig {
@Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean filter = new FilterRegistrationBean();
//把拦截类加进去
filter.setFilter(new tokenfilter());
filter.addUrlPatterns("/api/*");
return filter;
}
}
执行结果与上相同就不贴了
本文介绍了如何在Spring Boot中实现过滤器Filter,主要用于检查请求是否携带token。通过注解方式创建过滤类并展示不带token时被拦截的情况,以及带token时的正常访问。同时,还讲解了不使用注解的配置类实现过滤器的方法。

658

被折叠的 条评论
为什么被折叠?



