zoukankan      html  css  js  c++  java
  • springboot拦截器之Filter(一)

    filter实际上就是一个过滤器

    1使用Servlet3.0的注解进行配置

    2启动类中家@ServletComponentScan,进行扫描

    3新建一个Filter类,implements Filter,并且实现对应的接口

    4@WebFilter(urlPatterns = "/api/*",filterName = "LogginFilter")  标记一个类为filter,被spring扫描

    urlPatterns 是拦截规则,支持正则  

    5控制filterChain.doFilter方法的调用,来实现是否支持放行,不放行,web应该返回resp.sendRedirect("/index.html");

    场景:权限的控制,用户的登陆(非前后端分离)

    6代码:

    6.1目录结构

     6.2添加注解

    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan
    @ServletComponentScan
    public class Springboot2Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(Springboot2Application.class);
    }

    public static void main(String[] args) {
    SpringApplication.run(Springboot2Application.class, args);
    }
    }

    6.3新建Filter

    package com.example.demo.filter;

    import java.io.IOException;

    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    @WebFilter(urlPatterns = "/api/*",filterName = "LogginFilter")
    public class LogginFilter implements Filter{

    /**
    * 容器加载的时候调用
    */
    @Override
    public void init(FilterConfig filterConfig)throws ServletException {
    System.out.println("init loginFilter");
    }

    /**
    * 容器拦截的时候调用
    */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse serletResponse, FilterChain filterChain)
    throws IOException, ServletException {
    System.out.println("doliter loginFilter");
    HttpServletRequest rec=(HttpServletRequest)servletRequest;
    HttpServletResponse resp=(HttpServletResponse) serletResponse;
    String username=rec.getParameter("username");
    if("李明".equals(username)) {
    filterChain.doFilter(servletRequest, serletResponse);
    }else {
    resp.sendRedirect("/index.html");
    return;
    }
    }

    /**
    * 容器销毁的时候调用
    */
    @Override
    public void destroy() {
    System.out.println("destroy loginFilter");
    }


    }

    6.4新建controller

    package com.example.demo.controller.login;


    import java.util.HashMap;
    import java.util.Map;

    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;


    @RestController
    public class LoginController {

    private Map<String,Object> params=new HashMap<>();

    @RequestMapping(value="/api/v1/account")
    public Object account() {
    params.put("money", "1000");
    return params;
    }
    }

    6.5访问地址:http://localhost:8080//api/v1/account?username=李明

  • 相关阅读:
    NETCore EF 数据库连接正确nuget和MySql错误异常
    JS 对象属性名排序
    NET 在一个数组中查找另一个数组所在起始位置(下标从0开始,未找到返回-1)
    NET 判断是否为回文
    NET/Regex 处理连续空格
    NET 已知excel表格前面26个是a到z,27是aa28是ab,以此类推,N是多少
    Regex 首字母转大写/小写,全大写,全小写
    .NETCore下访问img、js等静态资源404解决办法
    WPF-后台代码使用Behavior
    Socket-服务器端与客户端互相通信
  • 原文地址:https://www.cnblogs.com/zhushilai/p/13555599.html
Copyright © 2011-2022 走看看