0


[SpringBoot] 8. aop 获取 request response

最近开发有一个需求需要在 aop 中获取request response ,搜索许久没有答案,故此记录📝~


aop 获取

packagecom.example.easy_im.aop;importcom.example.easy_im.Context;importjakarta.servlet.http.HttpServletRequest;importjakarta.servlet.http.HttpServletResponse;importlombok.extern.slf4j.Slf4j;importorg.apache.commons.lang3.StringUtils;importorg.aspectj.lang.ProceedingJoinPoint;importorg.aspectj.lang.annotation.Around;importorg.aspectj.lang.annotation.Aspect;importorg.springframework.stereotype.Component;importorg.springframework.web.context.request.RequestContextHolder;importorg.springframework.web.context.request.ServletRequestAttributes;importjava.util.Objects;@Aspect@Component@Slf4jpublicclassTokenAop{@Around("@annotation(com.example.easy_im.annotation.NeedToken)")publicObjectcheck(ProceedingJoinPoint pjp)throwsThrowable{try{HttpServletRequest servletRequest =((ServletRequestAttributes)Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();HttpServletResponse servletResponse =((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();String authorizationHeader = servletRequest.getHeader("Authorization");if(StringUtils.isBlank(authorizationHeader)|| servletResponse ==null){
                servletResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);return"请携带Authorization请求头";}// 执行目标方法Object proceed = pjp.proceed();Context.clear();return proceed;}catch(Exception e){return"fail";}}}

其他部分代码

packagecom.example.easy_im.annotation;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public@interfaceNeedToken{}
packagecom.example.easy_im.controller;importcom.example.easy_im.Context;importcom.example.easy_im.annotation.NeedToken;importcom.example.easy_im.dao.UserDao;importcom.example.easy_im.entity.User;importcom.example.easy_im.util.TokenUtil;importjakarta.annotation.Resource;importorg.springframework.data.domain.Example;importorg.springframework.validation.annotation.Validated;importorg.springframework.web.bind.annotation.*;importjava.util.Optional;@RestController@RequestMapping("/user")publicclassUserController{@ResourceprivateUserDao userDao;@PostMapping("/login")publicStringlogin(@Validated@RequestBodyUser user){User obj = userDao.findUserByNameAndPwd(user.getUserName(), user.getUserPwd());if(obj ==null){return"fail";}returnTokenUtil.generateToken(obj);}@DeleteMapping("/logout")@NeedTokenpublicStringlogout(){String token =Context.getToken();TokenUtil.destroyToken(token);return"ok";}}
标签: spring boot 后端 java

本文转载自: https://blog.csdn.net/qq_45704048/article/details/133495215
版权归原作者 程序员三木 所有, 如有侵权,请联系我们删除。

“[SpringBoot] 8. aop 获取 request response”的评论:

还没有评论