当前位置: 首页 > wzjs >正文

手机网站 分享网络推广运营

手机网站 分享,网络推广运营,网站速度,14年网站开发经验注解与AOP实战:实现权限控制 在现代Java开发中,注解(Annotation)和面向切面编程(AOP)是两种强大的技术,它们能够帮助我们实现代码的解耦,提高代码的可读性和可维护性。本文将通过一…

注解与AOP实战:实现权限控制

在现代Java开发中,注解(Annotation)和面向切面编程(AOP)是两种强大的技术,它们能够帮助我们实现代码的解耦,提高代码的可读性和可维护性。本文将通过一个实际的例子,展示如何结合自定义注解和AOP来实现权限控制。

1. 什么是注解?

注解是Java提供的一种元数据机制,能够为代码添加额外的信息。注解本身不会影响代码的执行,但可以通过反射等机制在运行时读取这些信息,进而实现特定的功能。

1.1 自定义注解

以下是一个自定义注解 @AuthCheck 的示例,用于标记需要权限控制的方法:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD) // 注解只能用于方法
@Retention(RetentionPolicy.RUNTIME) // 注解在运行时保留
public @interface AuthCheck {String mustRole() default ""; // 必须具有的角色
}

在这个注解中,mustRole 属性用于指定调用该方法所需的角色。

2. 什么是AOP?

AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它允许我们将横切关注点(如日志记录、权限控制、事务管理等)从业务逻辑中分离出来。通过AOP,我们可以在不修改原有代码的情况下,动态地为方法添加额外的功能。

2.1 AOP的核心概念

  • 切面(Aspect):包含横切关注点的模块。
  • 连接点(Join Point):程序执行的某个点,例如方法调用。
  • 通知(Advice):在连接点上执行的动作,如前置通知、后置通知等。
  • 切入点(Pointcut):定义在哪些连接点上应用通知。

3. 实战:使用注解和AOP实现权限控制

3.1 定义权限控制注解

我们已经在前面定义了 @AuthCheck 注解,用于标记需要权限控制的方法。

3.2 实现权限拦截器

以下是一个基于Spring AOP的权限拦截器 AuthInterceptor,它会拦截带有 @AuthCheck 注解的方法,并根据注解中的角色要求进行权限校验:

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
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.annotation.Resource;
import javax.servlet.http.HttpServletRequest;@Aspect // 标记为切面
@Component // 注册为Spring Bean
public class AuthInterceptor {@Resourceprivate UserApplicationService userApplicationService;/*** 拦截带有 @AuthCheck 注解的方法** @param joinPoint 切入点* @param authCheck 权限校验注解* @return 执行结果* @throws Throwable 异常*/@Around("@annotation(authCheck)")public Object doInterceptor(ProceedingJoinPoint joinPoint, AuthCheck authCheck) throws Throwable {String mustRole = authCheck.mustRole(); // 获取注解中指定的角色RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();// 获取当前登录用户User loginUser = userApplicationService.getLoginUser(request);UserRoleEnum mustRoleEnum = UserRoleEnum.getEnumByValue(mustRole);// 如果不需要权限,直接放行if (mustRoleEnum == null) {return joinPoint.proceed();}// 检查用户角色UserRoleEnum userRoleEnum = UserRoleEnum.getEnumByValue(loginUser.getUserRole());if (userRoleEnum == null) {throw new BusinessException(ErrorCode.NO_AUTH_ERROR); // 用户角色为空,抛出无权限异常}// 如果要求管理员权限,但用户不是管理员,抛出无权限异常if (UserRoleEnum.ADMIN.equals(mustRoleEnum) && !UserRoleEnum.ADMIN.equals(userRoleEnum)) {throw new BusinessException(ErrorCode.NO_AUTH_ERROR);}// 通过权限校验,放行return joinPoint.proceed();}
}

3.3 在业务方法中使用注解

以下是一个使用 @AuthCheck 注解的业务方法示例,只有管理员角色才能调用该方法:

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@PostMapping("/delete")@AuthCheck(mustRole = UserConstant.ADMIN_ROLE)public BaseResponse<Boolean> deleteUser(@RequestBody DeleteRequest deleteRequest) {if (deleteRequest == null || deleteRequest.getId() <= 0) {throw new BusinessException(ErrorCode.PARAMS_ERROR); // 参数校验}boolean b = userApplicationService.deleteUser(deleteRequest); // 删除用户return ResultUtils.success(b); // 返回结果}
}
http://www.dtcms.com/wzjs/475665.html

相关文章:

  • 动态网站开发期末考试答案网络营销有哪些
  • 沈阳教做网站衡水seo营销
  • 蒲县网站建设南昌seo推广公司
  • 有视频做的很好的网站吗我们seo
  • 怎么写网站建设方案书重庆人社培训网
  • sql做网站网站维护中是什么意思
  • 如何创建一个自己的公众号页面优化
  • 广广东网站建设网站标题优化排名
  • 平台网站蜗牛精灵seo
  • 网站返回404seo需要培训才能找到工作吗
  • 制作品牌网页西安网站优化
  • 建站平台和网站建设的区别sem与seo的区别
  • 晋江做任务的网站现在有哪些推广平台
  • 宣传网站怎么做优化系统的软件
  • 游戏开发学什么专业青岛网站seo分析
  • 东莞优秀网站建设苏州网络推广seo服务
  • 个人做电子商务网站如何在各大平台推广
  • 佛山网站开发哪家专业站长统计网站统计
  • 纯静态网站索引怎么做深圳关键词优化公司哪家好
  • 网站运营计划书如何提高百度搜索排名
  • 网站开发技术指标是什么推广价格一般多少
  • php 网站超市谷歌官网首页
  • 上海网站制作计划企业关键词优化专业公司
  • 工商注册信息查询系统湖南网站优化
  • 建设网站有哪些好处济南网站设计
  • 做网站按什么收费专业推广引流团队
  • mc做地图画网站湖北seo关键词排名优化软件
  • 旅游营销网站开发推广方式有哪些
  • 南通专业网站设计制作南京百度提升优化
  • 专业网站建设大型公司中国站长之家域名查询