SpringCloud 过滤器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hanjun0612/article/details/86510597

在网关中配置过滤器

验证签名

package com.kps.zuul.filter;


import com.kps.common.BodyReaderHttpServletRequestWrapper;
import com.kps.common.encrypt.MD5;
import com.kps.common.exception.ErrorTokenException;
import com.kps.common.utils.NetUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.MediaType;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@SuppressWarnings("all")
@Order(Ordered.HIGHEST_PRECEDENCE)
@WebFilter(filterName = "ValidAppSign", urlPatterns = {"/app/api/*"})
public class ValidAppSign extends OncePerRequestFilter {
    private static final Logger logger = LoggerFactory.getLogger(ValidToken.class);
    public final static String ERROR_TOKEN = "Sign is invalid";

    @Value("${isDebug}")
    private boolean isDebug;
    @Value("${appSign}")
    private String appSign;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        //获取 body 中post过来的数据
        String contentType = request.getContentType();
        if (StringUtils.isNotBlank(contentType) && contentType.indexOf(MediaType.APPLICATION_JSON.toString()) >= 0) {
            request = new BodyReaderHttpServletRequestWrapper(request);
        }
        String data = null;
        try {
            data = NetUtil.getBodyString(request);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //获取 url 中的数据
        String sign = request.getParameter("sign");
        String signMD5= MD5.getSign(data,appSign);
        if(!sign.equals(signMD5)){
            throw new ErrorTokenException(ERROR_TOKEN);
        }


        filterChain.doFilter(request, response);

    }
}

猜你喜欢

转载自blog.csdn.net/hanjun0612/article/details/86510597
今日推荐