ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

小而全美之拦截器篇

2021-03-11 18:04:51  阅读:127  来源: 互联网

标签:ignoreUrl 拦截器 小而全 void request private response 美之 public


欢迎使用CSDN-markdown编辑器

@Slf4j
@Component
@AllArgsConstructor
@WebFilter(urlPatterns = "/**", filterName = "myFilter")
public class myFilter implements Filter, Ordered {

    @Override
    public int getOrder() {
        return -200;
    }
    /**
     * 校验
     */
    private final JkkcApiRequestProperties jkkcApiRequestProperties;

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

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        request.setAttribute("utcCreate",System.currentTimeMillis());
        /** 请求开始时间 */
        String requestURI = ((HttpServletRequestImpl) request).getRequestURI();
        /** 是否开启过滤器 */
        if (jkkcApiRequestProperties.getMyFilter()) {
            /** 是否开启校验 */
            if (jkkcApiRequestProperties.getEnable()) {
                if (xiaoWeiIgnore(requestURI)) {
                    checkUser(request,response);
                }
            }
        }
        chain.doFilter(request, response);
    }

    /**
     * 检查是否校验路径
     *
     * @param requestUrl 校验路径
     * @return boolean
     */
    private Boolean xiaoWeiIgnore(String requestUrl) {
        return jkkcApiRequestProperties.getIgnoreUrl().stream().anyMatch(requestUrl::startsWith);
    }

    /**
     * 检查用户是否登录
     *
     * @param request 当前request请求
     * @param response
     */
    private void checkUser(ServletRequest request, ServletResponse response) {
        /** 查询是否携带uid参数 */
        String uid = Optional.ofNullable(request.getParameter("uid")).orElseThrow(() -> {
            request.setAttribute("baseException","uid不能为空");
            return new BaseException("uid不能为空");
        });
        
    }
}

@Data
@Slf4j
@RefreshScope
@ConfigurationProperties(prefix = "jkkc.filter")
public class JkkcApiRequestProperties {

    /** 忽略URL,List列表形式 */
    private List<String> ignoreUrl = new ArrayList<>();

    /** 是否启用鉴权模式 */
    private Boolean enable = false;

    /** 是否开启过滤器 */
    private Boolean myFilter = true;


    /**
     * 首次加载 每次刷新配置都会执行一次(因为内部会重新new一个当前对象)
     * 此方法解决网关频繁替换过滤,尽量避免影响不必要的开销
     */
    @PostConstruct
    public void init() {
        ignoreUrl.forEach(a ->{
            System.out.println(a+"1");
        });
        System.err.printf("===========初始化url");
        Collections.addAll(ignoreUrl, ENDPOINTS);

        ignoreUrl = ignoreUrl.stream().map(url -> url.replace("/**", "")).collect(Collectors.toCollection(ArrayList::new));
        ignoreUrl.forEach(a ->{
            System.out.println(a);
        });
    }

    /** 需要校验的路径 */
    private static final String[] ENDPOINTS = {};
}

标签:ignoreUrl,拦截器,小而全,void,request,private,response,美之,public
来源: https://blog.csdn.net/weixin_43834415/article/details/114675953

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有