KaTool-Security
Home
GetStart
  • AuthCenter
  • 适配SpringCloudGateWay
  • 适配Zuul
  • 网关中间件更换适配方案
  • 插件化鉴权
  • 注解文档
  • Restful响应文档
  • 内部方法文档
  • Auth中心RPC调用接口文档
  • 1.1.0.RELEASE之前
  • 1.1.0.RELEASE新概念
  • 参与贡献
  • 未来规划
  • KaTool
  • KaToolTest
  • 在github上修改本页面
  • Karos'Blog
Home
GetStart
  • AuthCenter
  • 适配SpringCloudGateWay
  • 适配Zuul
  • 网关中间件更换适配方案
  • 插件化鉴权
  • 注解文档
  • Restful响应文档
  • 内部方法文档
  • Auth中心RPC调用接口文档
  • 1.1.0.RELEASE之前
  • 1.1.0.RELEASE新概念
  • 参与贡献
  • 未来规划
  • KaTool
  • KaToolTest
  • 在github上修改本页面
  • Karos'Blog

注解文档

注意:关于@AuthCheck/@AuthControllerCheck/@AuthServiceCheck的用法有所更新,这份文档还能用,但是有些新的概念请到1.1.0.RELEASE新概念页面进行阅读。(主要是逻辑容器、权限码、mode那几块的知识点)

注解——@AuthControllerCheck/@AuthServiceCheck/@AuthCheck

这三个注解的具体用法在老版本中讲过,可以去看看。

但是在1.1.0.RELEASE之后,新增了注解隔离与注解优先级,其中Controller和Service注解是同级并且互斥的,另外@AuthCheck注解的优先级最大,如果类上有@AuthControllerCheck或者@AuthServiceCheck,同时,方法上有@AuthCheck注解,那么只会走@AuthCheck注解

下面对注解的几个参数来具体说一说:

Role和Permission

Role是角色,Permission是权限码

any和must

any是满足其中一个,must是全部满足

roleMode和permissionMode

分别用于控制anyRole和mustRole以及anyPermission和mustPermission,支持OR以及AND运算,默认都为AND运算

需要注意的是,role的判断逻辑和permission的判断逻辑是相互隔离的,其中一个满足就算通过,对于其他情况,比如:如果需要既满足role并且又要满足permission(或者其他更为复杂的鉴权逻辑),那么请重写doAuth接口即可

logicIndex

用于指定logic走向,填写bean在逻辑容器中的下标即可,默认为0,如果设置成Integer.MAX_INT,那么会将逻辑容器中的Bean都给走完。

@AuthPrimary

在1.1.0中新出的注解,标记负载中的主要字段,在KaSecurityAuthUtil中可以通过判断哪个字段存在该注解来获取该字段的值,用于控制上下线显示,建议使用唯一字段来进行表示

注意,在使用KaSecurityAuthUtil工具类时,尽量带上Class对象,否则可能会导致泛型擦除,最终转换为JsonObject对象

@AuthCheck

用于对某一特定的方法进行拦截,通常标记在接口函数上

  • anyRole 拥有任一角色即可通过
  • mustRole 必须包含所有角色才能通过
  • onlyCheckLogin 当前接口是否仅检查登录

@AuthControllerCheck

用于对某些特定的方法进行拦截,通常标记在Controller层大类上

  • anyRole 拥有任一角色即可通过

  • mustRole 必须包含所有角色才能通过

  • onlyCheckLogin 当前接口是否仅检查登录

  • excludeMethods 排除的方法列表

    由于方法名可能重复,所以每个方法的填写需要满足表达式:方法名(参数类型 参数名...),有多少个参数就要填写多少个

@AuthServiceCheck

用于对某些特定的方法进行拦截,通常标记在Service层大类上,需要注意的是,当使用Dubbo作为远程调用时,当Servcie作为生产者,那么@AuthServiceCheck可能会失效,解决方法看下文

  • anyRole 拥有任一角色即可通过

  • mustRole 必须包含所有角色才能通过

  • onlyCheckLogin 当前接口是否仅检查登录

  • excludeMethods 排除的方法列表

    由于方法名可能重复,所以每个方法的填写需要满足表达式:方法名(参数类型 参数名...),有多少个参数就要填写多少个

鉴权失效的解决方法

实现Dubbo的拦截SPI即可

类我写好了,具体的xml还得各位自行配置,这个类的位置

package cn.katool.security.filter;

import cn.katool.constant.AuthConstant;
import cn.katool.util.auth.AuthUtil;
import com.alibaba.dubbo.common.Constants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.*;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

@Activate(group = {Constants.PROVIDER})
public class DubboProviderAuthFilter implements Filter {


    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        String token = AuthUtil.getToken(requestAttributes.getRequest());
        RpcContext.getContext().setAttachment(AuthConstant.TOKEN_HEADER, token);
        return invoker.invoke(invocation);
    }
}

@EnableKaSecurityAuthCenter

用于分布式网关鉴权开启鉴权中心,本质上是开启了Dubbo和定时任务

Last Updated:
Contributors: ZonglinWu, ZonglinWu