AOP结合自定义注解实现权限验证
-
1、概述
-
2、权限校验场景
-
3、实现步骤
-
3.1、创建权限注解
-
3.2、创建权限服务接口及实现类
-
3.3、创建切面类
-
3.4、在需要权限校验的方法上使用自定义注解
-
3.5、访问Controller中的接口进行测试
-
-
4、权限校验进阶
-
4.1、支持多个权限
-
4.2、切面类修改
-
4.3、在需要权限校验的方法上使用自定义注解
-
4.4、访问Controller中的接口进行测试
-
-
5、总结
1、概述
之前一篇文章提到AOP可以实现权限校验,本篇就详细介绍一下AOP是如何基于自定义注解实现权限校验的。
2、权限校验场景
在实际项目中,经常需要对某些接口进行权限校验,比如:用户是否登录、用户是否有权限访问某个接口、用户是否有权限操作某些数据。通过AOP实现权限校验可以避免在每个需要校验的方法中都写一遍逻辑校验,提高代码复用性。
3、实现步骤
3.1、创建权限注解
package com.xxx.service.annotation;
import java.lang.annotation.*;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequirePermission {
String value() default "";//权限标识
}
3.2、创建权限服务接口及实现类
package com.xxx.service.service;
public interface PermissionService {
boolean hasPermission(String permission);
}
package com.xxx.service.service.impl;
import com.xxx.service.service.PermissionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class PermissionServiceImpl implements PermissionService {
//根据实际情况添加下面的服务类
/*@Autowired
private UserService userService;*/
@Override
public boolean hasPermission(String permission) {
//获取当前用户
/*User user = userService.getCurrentUser();
if (user == null) {
return false;
}*/
//获取用户权限列表
//List<String> permissions = useService.getUserPermissionList(user.getId());
List<String> permissions = new ArrayList<>();
permissions.add("create");
permission