在spring 中,其注解永远都是可以直接使用,不用管实现过程,因为他后台有个接口HandlerMethodArgumentResolver, 该接口可以处理methodParameter参数,在参数中可以spring web 容器自动解决参数, 相对比我写的注解利用注解解决字段中文显示问题, 其实处理过程都是一致的。
在spring boot 项目中可以动态获取登录用户
注解@CurrUserIfPresent
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface CurrUserIfPresent{
}
注解的处理器 CurrentUserIfPresentMethodArgumentResolver
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
@Component
public class CurrentUserIfPresentMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().isAssignableFrom(String.class) && parameter.hasParameterAnnotation(CurrUserIfPresent.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
return ((ServletWebRequest) webRequest).getRequest().getHeader("username");
}
}
spring 容器自动会将登录用户赋予 参数对象中
比如:
public String sayHello(@CurrUserIfPresentString username) {...}
该方法会自动将用户赋予username值
PS: 若你觉得可以、还行、过得去、甚至不太差的话,可以“关注”一下,就此谢过!
网友评论