废话不多说,直接上代码,若对你有用帮忙点点赞,感谢支持
目录
1、新增过滤器,对web资源进行拦截
/**
* 扫描包路径,凡是在/api/*下的接口都会被拦截
*/
@WebFilter(urlPatterns = "/api/*", filterName = "apiFilter")
public class ApiFilter extends GenericFilterBean {
@Autowired
private AesConfig aesConfig;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
ApiWrapper requestWrapper = null;
if (request instanceof HttpServletRequest) {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
//登录拦截
if (!loginFilter(httpServletRequest, httpServletResponse)) {
return;
}
//配置需要开启,否则不走加密流程
if (!aesConfig.getOpen()) {
chain.doFilter(request, response);
return;
}
//这里只针对post请求,也可其它请求
if (ServletUtil.METHOD_POST.equals(httpServletRequest.getMethod())) {
try {
requestWrapper = new ApiWrapper((HttpServletRequest) request, aesConfig.getKey());
} catch (Exception e) {
throwFilterError(httpServletResponse, CloudsantHttpStatus.PARAM_ERROR);
return;
}
}
}
chain.doFilter(requestWrapper, response);
}
/**
* 参数解密失败
*
* @param response
* @param status 枚举(PARAM_ERROR(-1, "请求参数不合法"))
*/
private void throwFilterError(HttpServletResponse response, CloudsantHttpStatus status) throws IOException {
Result result = new Result(status);
response.setCharacterEncoding(CharsetUtil.UTF_8);
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
response.setStatus(200);
PrintWriter printWriter = response.getWriter();
printWriter.append(Json.toJsonString(result));
}
/**
* 登录拦截
*
* @par