• [SpringBoot] 8. aop 获取 request response


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


    aop 获取

    package com.example.easy_im.aop;
    
    import com.example.easy_im.Context;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.lang3.StringUtils;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.springframework.stereotype.Component;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    import java.util.Objects;
    
    @Aspect
    @Component
    @Slf4j
    public class TokenAop {
    
    
        @Around("@annotation(com.example.easy_im.annotation.NeedToken)")
        public Object check(ProceedingJoinPoint pjp) throws Throwable {
    
            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";
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    其他部分代码

    package com.example.easy_im.annotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface NeedToken {
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    package com.example.easy_im.controller;
    
    import com.example.easy_im.Context;
    import com.example.easy_im.annotation.NeedToken;
    import com.example.easy_im.dao.UserDao;
    import com.example.easy_im.entity.User;
    import com.example.easy_im.util.TokenUtil;
    import jakarta.annotation.Resource;
    import org.springframework.data.domain.Example;
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.Optional;
    
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @Resource
        private UserDao userDao;
    
        @PostMapping("/login")
        public String login(@Validated @RequestBody User user) {
            User obj = userDao.findUserByNameAndPwd(user.getUserName(), user.getUserPwd());
    
            if(obj == null) {
                return "fail";
            }
            return TokenUtil.generateToken(obj);
        }
    
        @DeleteMapping("/logout")
        @NeedToken
        public String logout() {
            String token = Context.getToken();
            TokenUtil.destroyToken(token);
            return "ok";
        }
    
    
    
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
  • 相关阅读:
    C#基础入门教程-基础教程
    面试官:3 种缓存更新策略是怎样的?
    事务回滚异常
    Mycat2【java提高】
    Mysql的四个隔离级别是如何实现的 (简要)
    人脸识别5.3- insightface人脸3d关键点检测源码更改,根据姿态角修正图片角度,调整向量解析值,增大识别准确度,以及返回
    (附源码)APP+springboot个人健康管理 毕业设计 202031
    软件测试八款优秀的API安全测试工具,会用三款工作效率能提升50%
    刻字机尖角补偿
    spring中的ApplicationEventMulticaster
  • 原文地址:https://blog.csdn.net/qq_45704048/article/details/133495215