zoukankan      html  css  js  c++  java
  • springboot在参数上自定义注解拦截请求以验证sign值[原]

    1 NeedSignBody

    package com.rosellete.iescp.visitor.config.resolver;
    
    import java.lang.annotation.*;
    
    /**
     * @author qinyuguan
     */
    @Target({ElementType.PARAMETER})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface NeedSignBody {
        boolean required() default true;
    }

    2 MyMethodArgumentResolver

    package com.rosellete.iescp.visitor.config.resolver;
    
    import org.springframework.core.MethodParameter;
    import org.springframework.security.core.Authentication;
    import org.springframework.security.core.context.SecurityContext;
    import org.springframework.security.core.context.SecurityContextHolder;
    import org.springframework.stereotype.Component;
    import org.springframework.web.bind.support.WebDataBinderFactory;
    import org.springframework.web.context.request.NativeWebRequest;
    import org.springframework.web.method.support.HandlerMethodArgumentResolver;
    import org.springframework.web.method.support.ModelAndViewContainer;
    
    @Component
    public class MyMethodArgumentResolver implements HandlerMethodArgumentResolver {
    
        @Override
        public boolean supportsParameter(MethodParameter parameter) {
            //如果参数是字符串类型,并且有NeedSignBody注解,则该请求参数必须带加签信息
            if (parameter.getParameterType().equals(String.class) && parameter.hasParameterAnnotation(NeedSignBody.class)) {
                //做一些必须带加签信息的数据值
                return true;
            }
            return false;
        }
    
        @Override
        public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
            NeedSignBody currentUserAnnotation = parameter.getParameterAnnotation(NeedSignBody.class);
            SecurityContext sc = SecurityContextHolder.getContext();
            Authentication auth = sc.getAuthentication();
            //LoginUser loginUser = (LoginUser) auth.getPrincipal();
            //Integer userId = loginUser.getId();
            return "ddd";
        }
    }

    3 ArgumentResolversWebConfig

    package com.rosellete.iescp.visitor.config.webconfig;
    
    import com.rosellete.iescp.visitor.config.resolver.MyMethodArgumentResolver;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.method.support.HandlerMethodArgumentResolver;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    import javax.annotation.Resource;
    import java.util.List;
    
    @Configuration
    public class ArgumentResolversWebConfig implements WebMvcConfigurer {
    
        @Resource
        private MyMethodArgumentResolver userIdMethodArgumentResolver;
    
        @Override
        public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
            argumentResolvers.add(userIdMethodArgumentResolver);
        }
    
    }

    4 ParameterController

    package com.rosellete.iescp.visitor.config.resolver;
    
    import com.rosellete.iescp.base.annotation.StdRequestMapping;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController("parameterController")
    @RequestMapping("parameter")
    public class MyParameterController {
    
        Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @StdRequestMapping(value = {"/testResolver"}, method = {RequestMethod.POST})
        public String testResolver(@NeedSignBody String body) {
            return "abc";
        }
    
    }

    此时会自动判断body参数如果带了NeedSignBody注解,则可以自动做些事情

    感觉空虚寂寞,只是因为你无所关注,无处付出。
  • 相关阅读:
    51 nod 1279 扔盘子
    洛谷 P2911 [USACO08OCT]牛骨头Bovine Bones
    1759 加减表达式
    1750 加法表达式
    poj 1006 Biorhythms
    vijos 1198 最佳课题选择
    poj 1390 Blocks
    codevs 3324 新斯诺克
    codevs 2075 yh女朋友的危机
    对拍器
  • 原文地址:https://www.cnblogs.com/whatlonelytear/p/15032310.html
Copyright © 2011-2022 走看看