工作中经常会遇到这样的情况,前端(Android或vue等)跟后台通讯时需要对报文做加密和签名处理,但是后端微服务之间调用是明文,这种情况可以考虑通过自定义过滤器的方式实现。
前端在请求头里增加特定字段表示是前端请求,报文是否需要加密,后端自定义过滤器获取请求时根据请求头判断,如果是前端请求并且需要加密,则走加密流程,如果不是前端请求且不需要加密,则直接走正常流程即可。
废话不多说,上代码,后端自定义filter代码如下:
@Slf4j
@Component
public class AppRequestFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);log.info("AppRequestFilter init");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest httpServletRequest = ServletUtils.getRequest();Map<String, String> headers = ServletUtils.getHeaders(httpServletRequest);log.info("AppRequestFilter headers: "