全局异常处理类
import com.demo.vo.HttpResult;
import org.springframework.validation.BindException;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.ArrayList;
import java.util.List;
* 定义全局异常类
* 全局异常控制类加入拦截
@RestControllerAdvice
public class GlobalExceptionHandle {
@ExceptionHandler(value = BindException.class)
public HttpResult bindExceptionErrorHandler(BindException ex) throws Exception {
List<String> errorList=new ArrayList<>();
if(ex.hasErrors()){
List<ObjectError> list=ex.getAllErrors();
for(ObjectError objectError:list){
errorList.add(objectError.getDefaultMessage());
// ex.getAllErrors().forEach( objectError -> errorList.add(objectError.getDefaultMessage()));
if(!errorList.isEmpty()){
return HttpResult.error(errorList);
return HttpResult.error();
2.0 拦截器
2.1 拦截器类
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("my interceptor prehandles");
return true;
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("my interceptor postHandler");
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("my interceptor aferCompletion");
2.2 开启拦截器
import com.demo.interceptor.MyInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/hello");
拦截器中方法的执行顺序:preHandle-->Controller-->postHandle-->afterCompletion
python处理滑块验证码 爬虫滑块验证码
简单说明一下:测试网址: https://accounts.douban.com/passport/login (豆瓣登陆页)
类型: 滑块验证码
基本思路: 下载图片到本地 => 使用CV获取边缘值并计算距离 => 模拟用户拖动 目录简单说明一下:一、模拟点击1.点击至验证页2.保存图片二、CV识别缺口1. 边缘识别2.计算距离三、模拟用户拖动1. 距离分散2. 拖动最终代码: 一、