비즈니스 요구로 인해 두 가지 프로젝트 세트가 있습니다. 하나는 라우팅 센터이고 다른 하나는 비즈니스 시스템입니다.
이제 문제는 라우팅 센터가 WeChat 공식 계정과 미니 프로그램 모듈 기능을 통합한다는 것입니다. 그리고 비즈니스 시스템은 많은 서비스 세트를 배포했습니다.
이제 라우팅 센터에 전화하여 지정된 비즈니스 시스템으로 인터페이스를 다시 라우팅해야 합니다
미니 프로그램과 바인딩 공용 계정 사용자 정보를 비즈니스 시스템과
라우팅 센터 인터페이스와 비즈니스 시스템 인터페이스를 판단
사용자 정보를 통해 찾은 비즈니스 시스템 서비스를 해당 비즈니스 시스템에 배포
처리 단계
비즈니스 시스템에 휴대폰 번호가 있습니다. 사용자가 등록하면 휴대폰 번호가 기록을 위해 라우팅 센터로 전송됩니다
1. 라우팅 센터 시스템 Mapping
private static List<String> URLS = new ArrayList<>(); @Resource private WebApplicationContext applicationContext; @Override public void init(FilterConfig filterConfig) throws ServletException { applicationContext .getBean(RequestMappingHandlerMapping.class) .getHandlerMethods() .forEach((k, v) -> { k.getPatternsCondition().getPatterns().stream().forEach(s-> URLS.add(s)); }); log.info("过滤器初始化"); }
2에서 인터페이스를 가져옵니다. 요청 인터페이스 경로를 가져옵니다
HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; String requestName = request.getRequestURI();
3. 라우팅 센터
if (URLS.contains(requestName)) { //系统接口 chain.doFilter(servletRequest, servletResponse); } else { //业务系统接口 需要代理 // 代理请求 ResponseEntity<String> redirect = routerService.redirect(request, response, "xxx", "xxx"); //设置将字符以"UTF-8"编码输出到客户端浏览器 response.setCharacterEncoding("UTF-8"); //通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码 response.setHeader("content-type", "application/json; charset=utf-8"); response.getWriter().write(redirect.getBody()); }
import com.jyw.router.miniapp.service.IRouterService; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.http.ResponseEntity; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import javax.annotation.Resource; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * @author 沈峻 * @ClassName RouterFilter * @Description TODO * @Date 2023/4/20 12:23 **/ @Configuration @WebFilter(urlPatterns = "/*", filterName = "Router") @Slf4j public class RouterFilter implements Filter { private static List<String> URLS = new ArrayList<>(); @Resource private WebApplicationContext applicationContext; @Resource private IRouterService routerService; @Override public void init(FilterConfig filterConfig) throws ServletException { applicationContext.getBean(RequestMappingHandlerMapping.class).getHandlerMethods().forEach((k, v) -> { k.getPatternsCondition().getPatterns().stream().forEach(s-> URLS.add(s)); }); log.info("过滤器初始化"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; String requestName = request.getRequestURI(); /*顺手解决跨域问题*/ response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); log.info(requestName); if (URLS.contains(requestName)) { chain.doFilter(servletRequest, servletResponse); } else { // 代理请求 ResponseEntity<String> redirect = routerService.redirect(request, response, "http://192.168.2.18/api", "/router"); //设置将字符以"UTF-8"编码输出到客户端浏览器 response.setCharacterEncoding("UTF-8"); //通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码 response.setHeader("content-type", "application/json; charset=utf-8"); response.getWriter().write(redirect.getBody()); } log.info("--------------------------------------------------------"); } @Override public void destroy() { Filter.super.destroy(); }
위 내용은 SpringBoot 필터는 프로젝트 내에서 인터페이스 필터링을 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!