Skip to content

权限

所有的权限校验都在网关中处理,验证通过后才会调用到子系统。如果网关鉴权失败则返回403状态码,如果没有登录会跳转到登录页面,AJax 请求则返回401的错误码

如果要在运行时获取当前登录用户的信息可以使用SecurityUserUtils.getLoginUser()来是现实。需要注意的是如果当前用户没有登录则会抛出401的错误码

依赖

xml
  <dependency>
      <groupId>com.leaderrun</groupId>
      <artifactId>leaderrun-security-starter</artifactId>
  </dependency>

接口鉴权

使用@PreAuthorize注解在方法上标注,或者在控制器类中标注。

如果不需要登录的接口可以使用@IgnoreAuth注解,可以标注在接口方法或者类上。如果是标注在控制器类上则表示该控制器的所有接口都不要登录鉴权。如果接口没有使用权限注解@PreAuthorize@IgnoreAuth则表示只要登录了就可以访问

注意事项

  • 目前支持@PreAuthorize,不支持其它SpringSecurity的权限注解。

  • El表达式只支持hasAuthority(String)/hasAnyAuthority(String[])/hasRole(String)/hasAnyRole(String[])

  • 如果控制器类上标注了@IgnoreAuth那么即便你的接口有主键权限@PreAuthorize也会被视为不需要登录。前者的优先权大于后者

  • 由于是在网关鉴权,那么内部PRC调用服务的时候是不会走网关的,所有不被调用者的接口权限是不被校验的。举例: upm有一个userInfo接口,userInfo接口标注了@PreAuthorize('user:info')说明userInfo需要user:info权限。cm 调用 upmuserInfo接口的时候如果调用者没有user:info权限也能调用,这是网关鉴权时候的一个弊端。

  • 需要添加依赖,应为SecurityUserUtils.getLoginUser()获取当前登录用户所在部门的所有用户主键的时候需要RPC调用用户中心的接口获取

    xml
            <dependency>
                <groupId>com.leaderrun</groupId>
                <artifactId>business-upm-api</artifactId>
            </dependency>

粤ICP备2022017444号