springboot在参数上自定义注解拦截请求以验证sign值[原]
1 NeedSignBody
package com.bobo.vv.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.bobo.vv.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.bobo.vv.config.webconfig; import com.bobo.vv.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.bobo.vv.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注解,则可以自动做些事情
感觉空虚寂寞,只是因为你无所关注,无处付出。