国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

應(yīng)用場景舉例:

當(dāng)不同身份的用戶請求一個(gè)接口時(shí),用來校驗(yàn)用戶某些身份,這樣可以對單個(gè)字段數(shù)據(jù)進(jìn)行精確權(quán)限控制,具體看代碼注釋

自定義注解

/** * 對比請求的用戶身份是否符合 * @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 = '根據(jù)手機(jī)號來刪除用戶') @PostMapping(value = '/delete_phone') public BaseCommonResult<Integer> deletePhone(@CompareUser(value = 'phone') String phone) { int i = userService.deleteByPhone(phone); return BaseCommonResult.success(i); }參數(shù)解析器

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

/** * @author liuyalong * @date 2020/9/25 15:56 */public class BaseCurrentUserInterceptor implements HandlerMethodArgumentResolver { /** * 用于判定是否需要處理該參數(shù)注解,返回true為需要, * 并會去調(diào)用下面的方法resolveArgument。 */ @Override public boolean supportsParameter(MethodParameter parameter) { //只處理CurrentUser注解修飾的參數(shù) 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() + ']'); } /* * 獲取要驗(yàn)證的字段名 */ //檢查是否給字段取了別名 String paramName = ''.equalsIgnoreCase(parameterAnnotation.name()) ? parameterAnnotation.value() : parameterAnnotation.name(); if (''.equalsIgnoreCase(parameterAnnotation.name())) { //從參數(shù)中獲取定義的字段名 paramName = parameter.getParameter().getName(); } //獲取請求字段的值 String paramValue = String.valueOf(webRequest.getParameter(paramName)); //從請求頭中獲取已經(jīng)登錄的用戶 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(); } } //將參數(shù)原封不動返回出去,需要還原回需要的類型 WebDataBinder binder = binderFactory.createBinder(webRequest, parameterType, paramName); return binder.convertIfNecessary(paramValue, parameterType, parameter); }}配置WebMvcConfigurer

注意這里提供了兩種方式加載,因?yàn)?/p>

@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('/**'); } //參數(shù)解析器,自定義的優(yōu)先級最低,所以會失效, // 解決方案是下面的 @PostConstruct ,把優(yōu)先級調(diào)最高 // 但是這樣@PathParam @RequestParam就失效了,@CompareUser(value='xxx')可以完全替換@RequestParam功能// @Override// public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {// resolvers.add(currentUserInterceptor);//// } /** *參數(shù)解析器優(yōu)先級調(diào)最高 */ @PostConstruct public void init() { // 獲取當(dāng)前 RequestMappingHandlerAdapter 所有的 Resolver 對象 List<HandlerMethodArgumentResolver> resolvers = requestMappingHandlerAdapter.getArgumentResolvers(); List<HandlerMethodArgumentResolver> newResolvers = new ArrayList<>(resolvers.size() + 1); // 添加自定義參數(shù)解析器到集合首位 newResolvers.add(currentUserInterceptor); // 添加 已注冊的 Resolver 對象集合 newResolvers.addAll(resolvers); // 重新設(shè)置 Resolver 對象集合 requestMappingHandlerAdapter.setArgumentResolvers(newResolvers); }}效果

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

以上就是SpringBoot 攔截器和自定義注解判斷請求是否合法的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot 攔截器和自定義注解的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 一级做a爰片久久毛片人呢 一级做a爰片久久毛片唾 | 国产欧美久久久精品 | 美女被拍拍拍拍拍拍拍拍 | 欧美一级毛片欧美大尺度一级毛片 | 一级做a爰片性色毛片小说 一级做a爰片性色毛片中国 | 日韩亚洲国产综合久久久 | 夜间福利网站 | 97精品国产综合久久久久久欧美 | 国产成人精品日本亚洲网站 | 成人网在线免费观看 | 午夜三级国产精品理论三级 | 欧美成人性生活视频 | 亚洲三级黄色片 | 亚洲rct中文字幕在线 | 最新国产三级在线观看不卡 | 久久99精品视频在线在线观看 | 成年人免费小视频 | 蕾丝视频永久在线入口香蕉 | 国产精品9 | 免费特黄一级欧美大片 | 日本美女视频韩国视频网站免费 | 国产成人精品三级91在线影院 | 国产国语在线播放视频 | 国亚洲欧美日韩精品 | 亚洲成人一区 | 日本一区二区三区国产 | 久久精品一 | 国产a区| 亚洲国产天堂久久综合图区 | 99国产精品欧美久久久久久影院 | 免费三级网址 | 久久精品免费观看久久 | 欧美亚洲另类在线 | 久久精品国产99久久香蕉 | 欧美肥婆videoxxx | 3d动漫精品成人一区二区三 | 亚洲精品无码不卡在线播放he | 国产亚洲精品九九久在线观看 | 成人欧美日韩高清不卡 | 成人网18免费 | 国产一区二区三区在线观看免费 |