一、通过拦截器实现
1 权限表
为了方便,我直接用的现成的权限表,这是表结构
2 自定义注解
首先,创建一个自定义注解,用于controller层的方法或类上
// @Target表示该注解可以用在方法和类上
@Target({
ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiPermission {
PermissionEnum permission();
}
3 权限枚举类
PermissionEnum枚举内是权限枚举,值对应数据表中 api_permission 字段,后期会通过这个来校验权限
@Getter
public enum PermissionEnum {
DEVICELIST_A("north:device:list"),
DEVICEINFO_A("north:device:info"),
DEVICEEXTEND_A("north:device:info:extend"),
DEVICEHISTORICALDATA_A("north:device:historicalData"),
DEVICESTATUS_A("north:device:status")
;
private String value;
PermissionEnum(String value) {
this.value = value;
}
}
4 拦截器
最重要的就是拦截器了,通过拦截器获取方法或类上的注解信息,然后比对权限表,判断是否拥有权限
@Component
@Slf4j
public class PermissionInterceptor implements HandlerInterceptor {
@Autowired
INorthAppApiService iNorthAppApiService;
// 前置处理器
@Override
public boolean