在 spring 引导环境中实现自定义注释
implement custom annotation in spring boot environment
我想在spring引导环境
中创建和实现注释
- 通过 HttpServletRequest 获取 cookie 值以从某些服务获取 UserDto
- 而且我想通过下面的注解(@UserInfo)插入,但是不知道怎么访问
喜欢下面的代码
@RequestMapping("/test")
public test (@UserInfo UserDto userDto) {
Syste.out.println(userDto.getUserId());
}
这是一个例子。我没有所有要求,但我认为这足以帮助您:
@Aspect
@Component
public class AspectConf {
@Autowired
private UserService userService;
@Pointcut("execution(@org.springframework.web.bind.annotation.RequestMapping * *(..))")
public void requestMappingAnnotatedMethod() {}
@Before("requestMappingAnnotatedMethod()")
public void beforeAuthorizeMethods(final JoinPoint joinPoint) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
//do something with cookies: request.getCookies();
Object userInfoAnnotatedArgument = getUserInfoAnnotatedParameter(joinPoint);
if(userInfoAnnotatedArgument != null) {
((UserDto)userInfoAnnotatedArgument).setName("xsxsxsxsx");
//get `userInfo` from `userService` and update `dto`
((UserDto)userInfoAnnotatedArgument).setXXX(...);
}
}
private Object getUserInfoAnnotatedParameter(final JoinPoint joinPoint) {
final MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();
Method method = methodSignature.getMethod();
Object[] arguments = joinPoint.getArgs();
Parameter[] parameters = method.getParameters();
for (int i = 0; i < parameters.length; i++) {
Annotation[] annotations = parameters[i].getAnnotations();
for (Annotation annotation : annotations) {
if (annotation.annotationType() == UserInfo.class) {
return arguments[i];
}
}
}
return null;
}
}
我想在spring引导环境
中创建和实现注释- 通过 HttpServletRequest 获取 cookie 值以从某些服务获取 UserDto
- 而且我想通过下面的注解(@UserInfo)插入,但是不知道怎么访问
喜欢下面的代码
@RequestMapping("/test")
public test (@UserInfo UserDto userDto) {
Syste.out.println(userDto.getUserId());
}
这是一个例子。我没有所有要求,但我认为这足以帮助您:
@Aspect
@Component
public class AspectConf {
@Autowired
private UserService userService;
@Pointcut("execution(@org.springframework.web.bind.annotation.RequestMapping * *(..))")
public void requestMappingAnnotatedMethod() {}
@Before("requestMappingAnnotatedMethod()")
public void beforeAuthorizeMethods(final JoinPoint joinPoint) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
//do something with cookies: request.getCookies();
Object userInfoAnnotatedArgument = getUserInfoAnnotatedParameter(joinPoint);
if(userInfoAnnotatedArgument != null) {
((UserDto)userInfoAnnotatedArgument).setName("xsxsxsxsx");
//get `userInfo` from `userService` and update `dto`
((UserDto)userInfoAnnotatedArgument).setXXX(...);
}
}
private Object getUserInfoAnnotatedParameter(final JoinPoint joinPoint) {
final MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();
Method method = methodSignature.getMethod();
Object[] arguments = joinPoint.getArgs();
Parameter[] parameters = method.getParameters();
for (int i = 0; i < parameters.length; i++) {
Annotation[] annotations = parameters[i].getAnnotations();
for (Annotation annotation : annotations) {
if (annotation.annotationType() == UserInfo.class) {
return arguments[i];
}
}
}
return null;
}
}