• 自定义注解的实现


    1.AOP实现场景 https://zhuanlan.zhihu.com/p/96597358

    2.拦截器使用场景[SpringBoot之HandlerInterceptor拦截器]:

     通常是权限注解做一些预处理

    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    @Inherited
    public @interface TESTPermit {

    PermitEnum[] values() default {PermitEnum.COMMON};
    }

    ---------------------


    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.method.HandlerMethod;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Arrays;
    import java.util.List;

    /**
    * 请求拦截.
    */
    @Slf4j
    public class TESTPermitInterceptor implements HandlerInterceptor {

    // 在业务处理器处理请求之前被调用
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    //优化.
    String token = request.getHeader(JwtSecurityDefines.HEADER_AUTHORIZATION);
    Integer platId = 0;

    //但凡能进入本拦截器的,没token的说明在白名单里,直接放行
    if(StringUtil.isNotEmpty(token)){
    try {
    platId = JwtUtil.***(token);
    } catch (Exception ex) {
    throw new ****("无权限");
    }
    }else{
    return true;
    }

    if (handler instanceof HandlerMethod) {
    HandlerMethod handlerMethod = (HandlerMethod) handler;
    if (handlerMethod.hasMethodAnnotation(ATGPermit.class)) {
    PermitEnum[] permitEnums = handlerMethod.getMethodAnnotation(ATGPermit.class).values();
    List<PermitEnum> permitList = Arrays.asList(permitEnums);
    if (permitList.contains(PermitEnum.COMMON)) {
    return true;
    }
    if ((platId == * && permitList.contains(PermitEnum.DMP))
    || (platId == * && permitList.contains(PermitEnum.PSP))) {
    return true;
    } else {
    return false;
    }
    } else {
    return true;
    }
    } else {
    return true;
    }
    }

    // 在业务处理器处理请求完成之后,生成视图之前执行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
    throws Exception {
    }

    // 在DispatcherServlet完全处理完请求之后被调用,可用于清理资源
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
    throws Exception {
    }

    }
  • 相关阅读:
    vue2.0 keep-alive最佳实践
    Vue解决安卓4.4不兼容的问题
    体验异步的终极解决方案-ES7的Async/Await
    axios在vue中的简单配置与使用
    AngularJS-UI-Router
    SignalR 填坑记
    小心C# 5.0 中的await and async模式造成的死锁
    使用BCP导出导入数据
    关闭正在执行的事务 Kill
    C# 正则表达式
  • 原文地址:https://www.cnblogs.com/beixiaoyi/p/13606042.html
Copyright © 2020-2023  润新知