3 个注解,优雅的实现微服务鉴权(二)

love374
发布于 2022-7-8 17:30
浏览
0收藏

 

2. 定义三个注解
经过第①步,鉴权已经下放给下游服务了,那么下游服务如何进行拦截鉴权呢?

 

其实Spring Security 提供了3个注解用于控制权限,如下:

  1. @Secured
  2. @PreAuthorize
  3. @PostAuthorize

 

关于这三个注解就不再详细介绍了,有兴趣的可以去查阅官方文档。

 

陈某这里并不打算使用的内置的三个注解实现,而是自定义了三个注解,如下:

 

1.@RequiresLogin

见名知意,只有用户登录才能放行,代码如下:

/**
 * @author 公众号:码猿技术专栏
 * @url: www.java-family.cn
 * @description 登录认证的注解,标注在controller方法上,一定要是登录才能的访问的接口
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface RequiresLogin {
}

 

2.@RequiresPermissions

见名知意,只有拥有指定权限才能放行,代码如下:

/**
 * @author 公众号:码猿技术专栏
 * @url: www.java-family.cn
 * @description 标注在controller方法上,确保拥有指定权限才能访问该接口
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface RequiresPermissions {
    /**
     * 需要校验的权限码
     */
    String[] value() default {};

    /**
     * 验证模式:AND | OR,默认AND
     */
    Logical logical() default Logical.AND;
}

 

3.@RequiresRoles

见名知意,只有拥有指定角色才能放行,代码如下:

/**
 * @author 公众号:码猿技术专栏
 * @url: www.java-family.cn
 * @description 标注在controller方法上,确保拥有指定的角色才能访问该接口
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface RequiresRoles {
    /**
     * 需要校验的角色标识,默认超管和管理员
     */
    String[] value() default {OAuthConstant.ROLE_ROOT_CODE,OAuthConstant.ROLE_ADMIN_CODE};

    /**
     * 验证逻辑:AND | OR,默认AND
     */
    Logical logical() default Logical.AND;
}

 

以上三个注解的含义想必都很好理解,这里就不再解释了....

 

文章转自公众号:码猿技术专栏

标签
已于2022-7-8 17:30:03修改
收藏
回复
举报
回复
    相关推荐