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注解,则可以自动做些事情

    感觉空虚寂寞,只是因为你无所关注,无处付出。
  • 相关阅读:
    利用GitHub和Hexo打造免费的个人博客 coder
    Android基础——项目的文件结构(二) coder
    25个Android酷炫开源UI框架 coder
    MarkDown使用教程(In Atom) coder
    Android基础——项目的文件结构(一) coder
    25类Android常用开源框架 coder
    Android Activity启动黑/白屏原因与解决方式 coder
    我的window phone 开发第一步
    Entity Framework 4 In Action 读书笔记
    最近在制作一套ASP.NET控件,已初见雏形
  • 原文地址:https://www.cnblogs.com/whatlonelytear/p/15032310.html
Copyright © 2011-2022 走看看