电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

SpringBoot 攔截器和自定義注解判斷請求是否合法

瀏覽:2日期:2023-04-01 11:49:40

應用場景舉例:

當不同身份的用戶請求一個接口時,用來校驗用戶某些身份,這樣可以對單個字段數據進行精確權限控制,具體看代碼注釋

自定義注解

/** * 對比請求的用戶身份是否符合 * @author liuyalong * @date 2020/9/25 16:03 */@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTIME)public @interface CompareUser { /** * The name of the request parameter to bind . */ @AliasFor('name') String value() default ''; @AliasFor('value') String name() default '';}給controller的字段添加注解

@ApiOperation(value = '刪除用戶', notes = '根據手機號來刪除用戶') @PostMapping(value = '/delete_phone') public BaseCommonResult<Integer> deletePhone(@CompareUser(value = 'phone') String phone) { int i = userService.deleteByPhone(phone); return BaseCommonResult.success(i); }參數解析器

記得繼承后加@Component,這里是Base...所以不用

/** * @author liuyalong * @date 2020/9/25 15:56 */public class BaseCurrentUserInterceptor implements HandlerMethodArgumentResolver { /** * 用于判定是否需要處理該參數注解,返回true為需要, * 并會去調用下面的方法resolveArgument。 */ @Override public boolean supportsParameter(MethodParameter parameter) { //只處理CurrentUser注解修飾的參數 return parameter.hasParameterAnnotation(CompareUser.class); } /** * 對比用戶信息 */ @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { CompareUser parameterAnnotation = parameter.getParameterAnnotation(CompareUser.class); Class<?> parameterType = parameter.getParameterType(); if (parameterAnnotation == null) { throw new IllegalArgumentException('Unknown parameter type [' + parameterType.getName() + ']'); } /* * 獲取要驗證的字段名 */ //檢查是否給字段取了別名 String paramName = ''.equalsIgnoreCase(parameterAnnotation.name()) ? parameterAnnotation.value() : parameterAnnotation.name(); if (''.equalsIgnoreCase(parameterAnnotation.name())) { //從參數中獲取定義的字段名 paramName = parameter.getParameter().getName(); } //獲取請求字段的值 String paramValue = String.valueOf(webRequest.getParameter(paramName)); //從請求頭中獲取已經登錄的用戶 String userName = webRequest.getHeader(AuthConstant.USER_TOKEN_HEADER); //對于root用戶,可以操作一切,所以直接返回 if (!AuthConstant.ROOT_USER.equals(userName)) { //判斷身份是否一致,不一致就拋出異常,讓RestControllerAdvice處理 if (userName == null || !userName.equals(paramValue)) {throw new NotSameAuthorException(); } } //將參數原封不動返回出去,需要還原回需要的類型 WebDataBinder binder = binderFactory.createBinder(webRequest, parameterType, paramName); return binder.convertIfNecessary(paramValue, parameterType, parameter); }}配置WebMvcConfigurer

注意這里提供了兩種方式加載,因為

@Configurationpublic class WebMvcConfig implements WebMvcConfigurer { @Autowired private HandlerInterceptor handlerInterceptor; @Autowired private HandlerMethodArgumentResolver currentUserInterceptor; @Autowired private RequestMappingHandlerAdapter requestMappingHandlerAdapter; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(handlerInterceptor).addPathPatterns('/**'); } //參數解析器,自定義的優先級最低,所以會失效, // 解決方案是下面的 @PostConstruct ,把優先級調最高 // 但是這樣@PathParam @RequestParam就失效了,@CompareUser(value='xxx')可以完全替換@RequestParam功能// @Override// public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {// resolvers.add(currentUserInterceptor);//// } /** *參數解析器優先級調最高 */ @PostConstruct public void init() { // 獲取當前 RequestMappingHandlerAdapter 所有的 Resolver 對象 List<HandlerMethodArgumentResolver> resolvers = requestMappingHandlerAdapter.getArgumentResolvers(); List<HandlerMethodArgumentResolver> newResolvers = new ArrayList<>(resolvers.size() + 1); // 添加自定義參數解析器到集合首位 newResolvers.add(currentUserInterceptor); // 添加 已注冊的 Resolver 對象集合 newResolvers.addAll(resolvers); // 重新設置 Resolver 對象集合 requestMappingHandlerAdapter.setArgumentResolvers(newResolvers); }}效果

只有特定身份人員才可以刪除操作

以上就是SpringBoot 攔截器和自定義注解判斷請求是否合法的詳細內容,更多關于SpringBoot 攔截器和自定義注解的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
主站蜘蛛池模板: SDI车窗夹力测试仪-KEMKRAFT方向盘测试仪-上海爱泽工业设备有限公司 | 钢格板|热镀锌钢格板|钢格栅板|钢格栅|格栅板-安平县昊泽丝网制品有限公司 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 云阳人才网_云阳招聘网_云阳人才市场_云阳人事人才网_云阳人家招聘网_云阳最新招聘信息 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 新能源汽车电机定转子合装机 - 电机维修设备 - 睿望达 | 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 宁夏档案密集柜,智能密集柜,电动手摇密集柜-盛隆柜业宁夏档案密集柜厂家 | 二手色谱仪器,十万分之一分析天平,蒸发光检测器,电位滴定仪-湖北捷岛科学仪器有限公司 | 食品级焦亚硫酸钠_工业级焦亚硫酸钠_焦亚硫酸钠-潍坊邦华化工有限公司 | 蜂蜜瓶-玻璃瓶-玻璃瓶厂-玻璃瓶生产厂家-徐州贵邦玻璃制品有限公司 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 烘干设备-热泵烘干机_广东雄贵能源设备有限公司 | 液压油缸-液压站生产厂家-洛阳泰诺液压科技有限公司 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 净化板-洁净板-净化板价格-净化板生产厂家-山东鸿星新材料科技股份有限公司 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 环压强度试验机-拉链拉力试验机-上海倾技仪器仪表科技有限公司 | LZ-373测厚仪-华瑞VOC气体检测仪-个人有毒气体检测仪-厂家-深圳市深博瑞仪器仪表有限公司 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 不锈钢水箱厂家,不锈钢保温水箱-山东桑特供水设备 | 门禁卡_智能IC卡_滴胶卡制作_硅胶腕带-卡立方rfid定制厂家 | 管家婆-管家婆软件-管家婆辉煌-管家婆进销存-管家婆工贸ERP | 单螺旋速冻机-双螺旋-流态化-隧道式-食品速冻机厂家-广州冰泉制冷 | 天空彩票天下彩,天空彩天空彩票免费资料,天空彩票与你同行开奖,天下彩正版资料大全 | 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | 网站优化公司_SEO优化_北京关键词百度快速排名-智恒博网络 | 自动螺旋上料机厂家价格-斗式提升机定制-螺杆绞龙输送机-杰凯上料机 | 山东风淋室_201/304不锈钢风淋室净化设备厂家-盛之源风淋室厂家 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 方源木业官网-四川木门-全国木门专业品牌 | 光照全温振荡器(智能型)-恒隆仪器 | 缓蚀除垢剂_循环水阻垢剂_反渗透锅炉阻垢剂_有机硫化物-郑州威大水处理材料有限公司 | 立式矫直机_卧式矫直机-无锡金矫机械制造有限公司 | 奥运星-汽车性能网评-提供个性化汽车资讯| 湖南成人高考报名-湖南成考网| 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 | 深圳昂为官网-气体分析仪,沼气分析仪,动态配气仪,气体传感器厂家 | ICP备案查询_APP备案查询_小程序备案查询 - 备案巴巴 |