1,自定义注解
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CurrentUser {
}
2.添加用户解析器
public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(CurrentUser.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
User user = (User) webRequest.getAttribute("currentUser", RequestAttributes.SCOPE_REQUEST);
if (user != null) {
return user;
}
return null;
}
}
3.配置用户解析器
@Configuration
public class UserConfiguration implements WebMvcConfigurer{
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
//添加当前用户解析器
resolvers.add(getCurrentUserResolver());
}
@Bean
public CurrentUserMethodArgumentResolver getCurrentUserResolver() {
return new CurrentUserMethodArgumentResolver();
}
}
4.使用:
@ResponseBody
@PostMapping(value = {"/setUser"})
public void setUser(@CurrentUser KmsUser currentUser) {}
完事