zoukankan      html  css  js  c++  java
  • 基于springboot通过自定义注解和AOP实现权限验证

    一、移入依赖

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.6.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>

    二、自定义注解:

    /**
     * @Description
     * @Date: 2018/12/13
     */
    
    import java.lang.annotation.*;
    
    @Target({ElementType.METHOD, ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Admin {
        String value() default "";
    }

    三、AOP切面配置

    package com.hsfw.backyard.web.vo;
    
    /**
     * @Description
     * @Date: 2018/12/13
     */
    
    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.aspectj.lang.reflect.MethodSignature;
    import org.springframework.stereotype.Component;
    
    @Aspect
    @Component
    public class AdminAspect {
        @Pointcut(value = "@annotation(com.hsfw.backyard.web.vo.Admin)")
        public void annotationPointCut() {
        }
    
        @Around("annotationPointCut()")
        public Object doAround(ProceedingJoinPoint joinPoint) {
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
            String methodName = signature.getMethod().getName();
            System.out.println("方法名:" + methodName);
            if (!validate()) {
                return "没有权限";
            }
            try {
                return joinPoint.proceed();
            } catch (Throwable throwable) {
                return null;
            }
        }
    
        private boolean validate() {
            // TODO 实现自己的鉴权功能
            return false;
        }
    }

    四、controller测试

    package com.hsfw.backyard.web.vo;
    
    /**
     * @Description
     * @Date: 2018/12/13
     */
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    
    @RestController
    /**
     * 访问:http://localhost:8080/login 可以直接访问成功。
     * 访问:http://localhost:8080/refund  由于加了@Admin注解,需要验证权限
     */
    public class AdminController {
        @GetMapping("/login")
        public String login() {
            return "登录成功!";
        }
    
        @RequestMapping("/refund")
        @Admin
        public String refund() {
            return "退款成功";
        }
    
    }

    五、启动方法

    package com.hsfw.backyard.web.vo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class TestAopApplication {
        public static void main(String[] args) {
            SpringApplication.run(TestAopApplication.class, args);
        }
    }
  • 相关阅读:
    Python 学习笔记 -- 列表的基本使用
    帮助你构建云服务的开源平台:openstack
    一个基于Asterisk构建的VOIP应用软件:Elastix介绍
    Asterisk项目概述
    Asterisk 代码架构概述
    云计算投入成本分析
    撕去服务器虚拟化和云计算的神秘面纱
    VOIP开源项目源码地址
    websocket技术
    JSP页面静态化总结之一使用URLRewrite实现url地址伪静态化
  • 原文地址:https://www.cnblogs.com/dand/p/10114539.html
Copyright © 2011-2022 走看看