相关阅读
这里会介绍一下用的比较多的前置拦截。
拦截器和过滤器都是对一写相应的请求处理进行一系列操作,但是会有一些先后顺序区别。
我画了一张图:
(资料图片)
执行的先后顺序就不做赘述了。
这次我主要正对拦截器作出一些操作。
有关我的前置拦截器的使用场景如下
第一步是构建自己的 Interceptor ,只需要构建一个类实现HandlerInterceptor。
1import lombok.extern.slf4j.Slf4j; 7 import org.apache.commons.io.IOUtils; 8 import org.springframework.web.servlet.HandlerInterceptor; 9 import javax.servlet.http.HttpServletRequest;10 import javax.servlet.http.HttpServletResponse;11 import java.io.IOException;12 import java.util.HashSet;13 import java.util.Set;14 15 /**16 * @author badfsiher17 * @Name IOSVerifyInterceptor18 * @since 2023/4/8 11:21 上午19 */20 @Slf4j21 public class IOSVerifyInterceptor implements HandlerInterceptor {22 23 private final CurriculunCache curriculunCache;25 //拦截用户26 private static final Set huids = new HashSet<>();27 //初始化数据28 static {29 huids.add("******");30 }31 32 public IOSVerifyInterceptor(CurriculunCache curriculunCache) {33 this.curriculunCache = curriculunCache;34 }35 //笔者这里只进行per的例子,其他两种效果是一样的36 @Override37 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {// 这里是你的拦截条件38 if(huids.contains(getHeadHuid(request))){39 String path = request.getServletPath();40 // 这里是你要组装的数据 比如我的数据就是从缓存获取一堆数据。 //matchurl是我的个人匹配逻辑41 RedisCourseKeyEnum redisCourseKeyEnum = routeCourseCache(IOSVerifyEnum.matchUrl(path));//输出你要的数据43 doPackageData(response,redisCourseKeyEnum);//这里的返回值决定是否继续后续的handler处理 false不继续 true继续44 return false;45 }46 return true;47 48 }52 //获取标识53 String getHeadHuid(HttpServletRequest request){55 return request.getHeader("Huid");56 }57 58 //打包返回数据59 void doPackageData(HttpServletResponse response, RedisCourseKeyEnum courseKeyEnum) {60 response.setStatus(200);61 response.setCharacterEncoding("UTF-8");62 // response.setContentType("UTF-8");63 String redisCaCheString = curriculunCache.getRedisCaCheString(courseKeyEnum);64 try {65 IOUtils.write(redisCaCheString,response.getWriter());66 } catch (IOException e) {67 log.error("IOSVerifyInterceptor 数据写入异常!",e.getMessage());68 }69 }86 } 第二步把你构建的拦截器配置出去做加载
6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.context.annotation.Configuration; 8 import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 9 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;10 11 /**12 * @author badfsiher13 * @Name IOSVerifyConfig14 * @since 2023/4/8 11:30 上午15 */16 @Configuration17 public class IOSVerifyConfig implements WebMvcConfigurer {18 @Autowired19 private CurriculunCache curriculunCache;20 21 //拦截路径22 private final String[] addPathPatterns ;23 //排除路径 24 private final String[] excludePatterns;25 //初始化26 {//这里是我初始化的拦截路径27 addPathPatterns = IOSVerifyEnum.getIOSVerifyList();28 //放行路径 这里和上面的是一样的格式29 excludePatterns = new String[]{};30 }31 32 @Override33 public void addInterceptors(InterceptorRegistry registry) {34 //注册 35 registry.addInterceptor(new IOSVerifyInterceptor(curriculunCache)).addPathPatterns(addPathPatterns).excludePathPatterns(excludePatterns);36 }37 }这两部就可以完成基础的配置。
这里要注意你的拦截的路径如果你要匹配全路径是没有问题的。
这里笔者就有遇到一些问题,比如你要匹配以“/xxxx”结尾的注意使用“/**/xxxx”,
excludePatterns 和addPathPatterns都是可变的字符串数组,稍微注意一下就好。
关键词:
上一篇: 大宗交易:机构账户买入惠泰医疗8412.5万元(04-13)|世界通讯
下一篇: 最后一页
相关阅读
2023-04-13
2023-04-13
2023-04-13
2023-04-13
2023-04-13
2023-04-13
2023-04-13
2023-04-13
2023-04-13
2023-04-13
2023-04-13
2023-04-13
2023-04-13
2023-04-13
2023-04-12
2023-04-12
2023-04-12
2023-04-12
2023-04-12
2023-04-12
2023-04-12
2023-04-12
2023-04-12
2023-04-12
2023-04-12
2023-04-12
2023-04-12
2023-04-12
2021-12-02
2021-12-02
2021-12-02
2021-12-02