• spring boot 使用aop实现拦截器


    实现功能:对某个目录下所有请求接口进行拦截判断,如检测登录状态等。

    需要pom.xml引入aop:

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>

    具体实现:

    package com.tuijie.gainguest.common.aspect;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.serializer.SerializerFeature;
    //import com.tuijie.gainguest.common.enums.JsonCodeEnum;
    //import com.tuijie.gainguest.common.result.JsonResp;
    //import com.tuijie.gainguest.controller.Constants;
    import lombok.extern.slf4j.Slf4j;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.stereotype.Component;
    import org.springframework.web.context.request.RequestAttributes;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.PrintWriter;
    import java.util.Arrays;
    import java.util.HashMap;
    
    /**
     * @Author: admin
     * @Description: 切面AOP
     * @Date Created in 9:39 AM 2020/3/31
     * @Modified By:
     */
    @Aspect
    @Component
    @Slf4j //log日志,可选
    public class SysPointcut {
        // 放行接口
        private final static String[] excludePathPatterns = {
                "/api/sysUserAdmin/login",
                "/api/sysUserAdmin/logout",
        };
        private static final SerializerFeature[] serializerFeatures;
        static {
            serializerFeatures = new SerializerFeature[] {
                    SerializerFeature.WriteMapNullValue,
                    SerializerFeature.WriteNullListAsEmpty
            };
        }
    
        /**
         * 后台管理切面AOP
         * 定义切入点,切入点为com.tuijie.gainguest.controller.admin包下所有类-接口
         * 通过@Pointcut注解声明频繁使用的切点表达式
         */
        @Pointcut("execution(* com.tuijie.gainguest.controller.admin..*.*(..)))")
        public void BrokerAspect() {}
    
        @Around("BrokerAspect()")
        public Object beforeExec(ProceedingJoinPoint pjp) throws Throwable {
            //获取request信息
            RequestAttributes ra = RequestContextHolder.getRequestAttributes();
            ServletRequestAttributes sra = (ServletRequestAttributes) ra;
            assert sra != null;
            HttpServletRequest request = sra.getRequest();
            HttpSession session = request.getSession();
    
            String uri = request.getRequestURI();
            if (!Arrays.asList(excludePathPatterns).contains(uri)) {
                Object admin = session.getAttribute(/*Constants.ACCOUNT_SESSION*/"test");
    //            JsonResp jsonResp;
                if (admin == null) {
                    log.warn("未登录: [{}] [{}]", session.getId(), uri);
    //                jsonResp = JsonResp.fail(JsonCodeEnum.OVERTIME.getMessage(), JsonCodeEnum.OVERTIME.getCode());
                    HttpServletResponse response = sra.getResponse();
                    assert response != null;
                    response.setCharacterEncoding("utf-8");
                    response.setContentType("application/json; charset=UTF-8");
                    PrintWriter writer = response.getWriter();
                    writer.write(JSON.toJSONString(/*jsonResp*/new HashMap<String, Object>(){{put("id", 1);}}, serializerFeatures));
                    writer.flush();
                    writer.close();
                    return null;
                }
            }
    
            return pjp.proceed();
        }
    
    }
  • 相关阅读:
    详解著名的awk Oneliner,第三部分:选择性输出特定行
    显示特定行
    nWave指令
    make 命令
    VIM脚本变量
    terninal 快捷键
    vim 实现begin end 配对 使用matchit插件
    VIM删除重复行
    linux命令--find(1)
    zabbix--创建触发器
  • 原文地址:https://www.cnblogs.com/007sx/p/12605377.html
Copyright © 2020-2023  润新知