spring boot项目如何增加过滤器呢?

乔欣 SpringBoot 发布时间:2023-02-23 21:01:11 阅读数:5078 1
下文笔者讲述SpringBoot增加过滤器的方法分享,如下所示
实现思路:
    我们只需继承Filter,编写自己的过滤器
	然后则过滤器会被加入到SpringBoot中
	 并起到相应的作用
import com.google.gson.Gson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

@Component
public class ApiFilter implements Filter {
    private Logger LOG = Logger.getLogger(ApiFilter.class.getName());

    @Autowired
    private ApiService ApiService;

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//        chain.doFilter(request,response);
       // ResponseEntity<Map<String,Object>> resr = null;

        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        String uri = httpRequest.getRequestURI();
        MyHttpServletRequestWrapper requestWrapper = new MyHttpServletRequestWrapper((HttpServletRequest) request);
        httpResponse.setCharacterEncoding("UTF-8");
        httpResponse.setContentType("application/json; charset=utf-8");

        String method = httpRequest.getMethod();
        LOG.log(Level.INFO,"================request mathod is "+ method);
        LOG.log(Level.INFO,"================request mathod is "+ uri);
        if(method.equals("OPTIONS")){
            chain.doFilter(request,response);
        }else {
            if(uri.contains("/clpcApi") ){
                String responseMsg = "";
                String responseCod = "3001";
                int statusCode = 403;
                boolean flag = false;
                Enumeration<String> headersNames = httpRequest.getHeaderNames();
                while(headersNames.hasMoreElements()){
                    String element = headersNames.nextElement();
                    LOG.log(Level.INFO,"================request header "+element+" is "+ httpRequest.getHeader(element));
                }
//                LOG.log(Level.INFO,"================request header headersNames is "+ gson.toJson(headersNames));
                ResponseEntity responseEntity = new ResponseEntity();
                String VendorsID = httpRequest.getHeader("VendorsID");
                String EncryptType = httpRequest.getHeader("EncryptType");
                String Sign = httpRequest.getHeader("Sign");
                String Timestamp = httpRequest.getHeader("Timestamp");

                LOG.log(Level.INFO,"================request header VendorsID    is "+ VendorsID);
                LOG.log(Level.INFO,"================request header EncryptType  is "+ EncryptType);
                LOG.log(Level.INFO,"================request header Sign         is "+ Sign);
                LOG.log(Level.INFO,"================request header Timestamp    is "+ Timestamp);
                if(Tools.checkValue(Sign)){
                    String userStr = ApiService.checkSign(Sign);//验证签名
                    if(userStr==null){
                        responseMsg = "无调用权限!";
                    }else{
                        if (Tools.checkNullValue(VendorsID)){
//                            responseMsg = "Request header No VendorsID!";
                            statusCode = 401;
                            responseMsg = "验签失败!";
                        }else if(Tools.checkNullValue(EncryptType)){
//                            responseMsg = "Request header No EncryptType!";
                            statusCode = 401;
                            responseMsg = "验签失败!";
                        }else if(Tools.checkNullValue(Timestamp)){
//                            responseMsg = "Request header No Timestamp!";
                            responseMsg = "验签失败!";
                            statusCode = 401;
                        }else{
                            flag = true;
                        }
                    }
                } else {
                    responseMsg = "验签失败!";
                    statusCode = 401;
                }

                responseEntity.setRsCode(responseCod);
                responseEntity.setRsDesc(responseMsg);

                PrintWriter writer = null;
                OutputStreamWriter osw = null;
                if(flag){
                    chain.doFilter(requestWrapper, response);
                }else{
                    try {

                        ((HttpServletResponse) response).setStatus(statusCode);
                        //response.set
                        osw = new OutputStreamWriter(response.getOutputStream(),"UTF-8");
                        writer = new PrintWriter(osw, true);
                        String jsonStr = new Gson().toJson(responseEntity);
                        writer.write(jsonStr);
                        writer.flush();
                        writer.close();
                        osw.close();
                    } catch (UnsupportedEncodingException e) {
                        LOG.log(Level.INFO,"过滤器返回信息失败:" + e.getMessage(), e);
                    } catch (IOException e) {
                        LOG.log(Level.INFO,"过滤器返回信息失败:" + e.getMessage(), e);
                    } finally {
                        if (null != writer) {
                            writer.close();
                        }
                        if (null != osw) {
                            osw.close();
                        }
                    }
                }
            }else if(uri.contains("/swagger-ui")){
                chain.doFilter(requestWrapper, response);
            }else {
                chain.doFilter(requestWrapper, response);
            }

        }
    }

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

        System.out.println("AllianzAPIFilter init============================================");

    }

    @Override
    public void destroy() {

        System.out.println("AllianzAPIFilter destroy============================================");
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202302/5892.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者