首页 > 其他分享 >springBoot使用过滤器进行权限认证和静态资源放行

springBoot使用过滤器进行权限认证和静态资源放行

时间:2022-08-24 23:13:35浏览次数:143  
标签:springBoot add 放行 过滤器 import servlet javax staticResourceTypes String

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

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;

import org.springframework.stereotype.Component;

import com.alibaba.druid.util.StringUtils;

@WebFilter(filterName = "loginFilter", value = "/*")
@Component
public class LoginFilter implements Filter {
    private static final String NAME = "x'x'x";  //header名称
    private static final String ERROR = "x'x'x x'x'x";  //错误返回
    private static final String VALUE = "x'x'x"; //header值

    @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;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String uri = request.getRequestURI();//取到你访问的资源
        String loginToken = request.getHeader(NAME); //获取到对应名称header 的值
     //获取请求参数attr
     String attr1 = request.getParameter("attr");
        if (uri.equals("/")) {  //静态资源默认访问路径在/下,所以放过
            filterChain.doFilter(servletRequest, servletResponse);
        }
        if (isStaticResource(uri)) {  //判断是否是静态资源
            filterChain.doFilter(servletRequest, servletResponse);
        }
        if (StringUtils.isEmpty(loginToken)) {  //验证token有没有
            response.sendError(404, ERROR);
            return;
        }
        if (!VALUE.equals(loginToken)) { //验证token是否正确
            response.sendError(404, ERROR);
            return;
        }
        filterChain.doFilter(servletRequest, servletResponse);  //放过
    }

    @Override
    public void destroy() {

    }

    private Set<String> staticResourceTypes = new HashSet<String>();

    {
        staticResourceTypes.add(".html");
        staticResourceTypes.add(".css");
        staticResourceTypes.add(".js");
        staticResourceTypes.add(".png");
        staticResourceTypes.add(".jpg");
        staticResourceTypes.add(".otf");
        staticResourceTypes.add(".eot");
        staticResourceTypes.add(".svg");
        staticResourceTypes.add(".ttf");
        staticResourceTypes.add(".woff");
        staticResourceTypes.add(".gif");
        staticResourceTypes.add(".ico");
        staticResourceTypes.add(".txt");
        staticResourceTypes.add(".gzip");
        staticResourceTypes.add(".xz");
        staticResourceTypes.add(".tar.gz");
        staticResourceTypes.add(".tar.bz2");
        staticResourceTypes.add(".jar");
        staticResourceTypes.add(".war");
        staticResourceTypes.add(".7z");
        staticResourceTypes.add(".tgz");
        staticResourceTypes.add(".gz");
        staticResourceTypes.add(".map");

    }

    public final boolean isStaticResource(String url) {

        boolean result = false;
        if (org.apache.commons.lang3.StringUtils.isBlank(url)) {
            return result;
        }
        int start = url.lastIndexOf(".");
        if (start < 0) {
            return result;
        }
        String prex = url.substring(start, url.length());
        return staticResourceTypes.contains(prex);
    }
}

 

标签:springBoot,add,放行,过滤器,import,servlet,javax,staticResourceTypes,String
From: https://www.cnblogs.com/huangruiwu/p/16622603.html

相关文章

  • SpringBoot项目requestId生成/日志打印
    原因SpringBoot项目中的默认日志框架SLF4J,在打印日志时,每行数据都有一个请求ID,这样会方便追踪日志。也可以使用一些链路追踪框架来实现这种目的。实现SLF4J里有一个MDC......
  • SpringBoot Excel导入导出
    一、引入pom.xml依赖<!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version><......
  • SpringBoot使用RabbitMq实现队列和延时队列
    闲来无事看了看RabbitMq的队列,总结了一些队列的实现方法,当然,免不了各种看别人的博客哈哈哈其中延时队列有两种方式,一种是使用TTl+死信队列实现,一种是直接用RabbitMq的官方......
  • 布隆过滤器(Bloom Filter)
    转载于https://zhuanlan.zhihu.com/p/433689454布隆过滤器(BloomFilter)是由Bloom于1970年提出的。我们可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(......
  • 1.2 文件过滤器FilenameFilter
    文件过滤器是File文件的拓展,通过该过滤器可以在File类中的list()方法中传递一个FilenameFileter参数,来指定返回的文件格式。下面展示两种使用文件过滤器的方式现需要获......
  • 【Springboot】过滤器
    Springboot实现过滤器实现过滤器方式有两种:Filter过滤器具体实现类通过@WebFilter注解来配置1、Filter过滤器具体实现类1.1实现Filter@Component@Slf4jpublic......
  • springboot+mybatis-plus-join+mysql实现连表查询
    1.简介  Mybatis是目前比较主流的持久层框架,使用非常广泛。Mybatis-Plus是基于Mybatis增强工具包,越来越受到开发人员的喜爱。  在使用Mybatis-Plus开发时,简单的crud......
  • 过滤器(过滤器只能最多有两个参数)
    过滤器就类似于是模版语法内置的内置方法django内置有60多个过滤器我们不需要学这么多了解10个左右就差不多了后面碰到了再去记忆基本语法{{数据|过滤器:参数}}转......
  • java springboot 初体验 (十)对接ut
    上一篇javaspringboot初体验(九)对接http请求https://www.cnblogs.com/zwjvzwj/p/16614205.htmlpom文件添加依赖包<!--自动查找主类用于打包和jacoco的......
  • springboot2.4.x websocket跨域问题
    1,springboot升级版本以后websocket连接出现以下错误java.lang.IllegalArgumentException:WhenallowCredentialsistrue,allowedOriginscannotcontainthespecialv......