【开发技巧】--使用AOP实现用户鉴权操作

1.为什么要使用AOP实现用户鉴权?

因为AOP是面向切面编程,它可以对原始代码无侵入而实现相关功能,在现在的互联网项目中对于用户鉴权操作也是极为重要的,因为在系统中有些内容不是所有用户都可见的,比如一些后台的数据对于普通用户而言我们不希望它能够范问,所以用户鉴权操作就和盘托出了。

2.如何使用AOP实现用户鉴权操作?
1. 创建用户授权交易切面SellerAuthorizeAspect
@Aspect
@Component
@Slf4j
public class SellerAuthorizeAspect {
   

    @Autowired
    RedisTemplate redisTemplate;


	//指定哪些需要拦截 哪些不需要拦截
    @Pointcut("execution(public * com.qingyun.wechat_ordersys.controller.Seller*.*(..))" +
            " && !execution(public * com.qingyun.wechat_ordersys.controller.SellerUserController.*(..))")
    public void verify() {
   
    }

    @Before("verify()")
    public void doVerify() {
   
        //获取request对象
        ServletReques
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自定义注解可以用于实现AOP鉴权,以下是一个简单的示例代码,展示了如何使用自定义注解实现AOP鉴权。 首先,定义一个自定义注解 `@Authorization`: ```java 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 Authorization { String[] roles() default {}; } ``` 然后,在需要进行鉴权的方法上添加 `@Authorization` 注解,并指定允许访问的角色列表: ```java public class MyService { @Authorization(roles = {"admin", "superuser"}) public void performAuthorizedAction() { // 执行需要鉴权操作 } public void performUnauthenticatedAction() { // 执行无需鉴权操作 } } ``` 接下来,创建一个切面类 `AuthorizationAspect`,在该类中使用 `@Around` 注解来拦截被 `@Authorization` 注解修饰的方法,并进行鉴权验证: ```java import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Component @Aspect public class AuthorizationAspect { @Around("@annotation(authorization)") public Object authorize(ProceedingJoinPoint joinPoint, Authorization authorization) throws Throwable { // 模拟鉴权逻辑 if (isUserAuthorized(authorization.roles())) { return joinPoint.proceed(); // 继续执行被拦截方法 } else { throw new UnauthorizedAccessException("Access denied"); // 抛出异常或执行其他处理 } } private boolean isUserAuthorized(String[] roles) { // 实际的鉴权逻辑,比如根据用户角色判断是否有权限访问 // 返回 true 表示有权限,返回 false 表示无权限 return true; } } ``` 最后,使用 Spring 或其他 AOP 框架来启用该切面,确保切面类被正确加载和生效。 通过以上步骤,你可以实现自定义注解用于AOP鉴权,对指定的方法进行权限验证。当调用被 `@Authorization` 注解修饰的方法时,会触发切面逻辑,在切面中进行鉴权验证,根据验证结果决定是否允许继续执行方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值