Skip to content

认证鉴权

TIP

基于功能服务中的登录鉴权starter进行实现,同时将连带介绍一下登录鉴权模块的详细使用方式。 其中认证和鉴权是两个概念,认证是用户登录成功后,用户信息会存储到Redis中,而鉴权则是用户登录成功后,会根据用户角色权限进行权限的校验, 如果用户没有权限则无法进行访问,对应到安全上就是进行垂直方向的安全控制。鉴权相关的说明单独放到了请求权限管理模块中。

登录认证

扩展或修改登录方式

默认的账号密码登录实现

通过实现 UsernamePasswordAuthentication 接口并注入到Spring容器中即可,见IAM模块中的PasswordLoginHandler实现, 是否验证码以及验证码有效时间具体在实现类自己进行手动实现。

第三方登录实现

通过实现 OpenIdAuthentication 接口并注入到Spring容器中即可,见IAM模块中的PhoneLoginHandlerWeChatLoginHandler等实现

其他登录实现

通过实现鉴权抽象接口AbstractAuthentication进行编写

调用登录

TokenEndpoint 接收登录相关请求,通过分发到具体登录实现类进行登录,登录成功后保存TokenRedis

访问鉴权

TIP

目前对请求接口进行控制的主要分为三类:第一种是无需登录就可以访问,第二种是登陆后可以访问,第三种是用户必须有相对应的权限才可以访问。请求后台接口时, 多种配置中任一方式认证通过后,就可以进行请求。

不需要登录可访问

通过在请求接口方法上标注@IgnoreAuth注解并设置ignoretrue,或着在配置文件中的bootx.starter.auth.ignoreUrls项进行配置相关路径

登陆后可访问

通过在请求接口方法上标注@IgnoreAuth注解并设置logintrue,且ignorefalse

权限控制

主要分为两种:通过Web管理端配置角色与接口的关联关系,或是通过在请求方法上标注@PermCode注解,系统会根据当前用户拥有角色所对应的权限码进行匹配, 如果配置有多个权限码,任一匹配通过即可访问。

权限码控制样例

java
@Tag(name ="角色菜单权限关系")
@RestController
@RequestMapping("/role/menu")
@RequiredArgsConstructor
public class RoleMenuController {
    private final RolePermService rolePermService;

    @PermCode("Admin")
    @Operation(summary = "根据角色id获取关联权限id集合(包含资源和菜单)")
    @GetMapping("/findPermissionIdsByRole")
    public ResResult<List<Long>> findPermissionIdsByRole(Long roleId,String clientCode){
        return Res.ok(rolePermService.findPermissionIdsByRole(roleId,clientCode));
    }
}
本文档内容版权属于济南易杯光年软件技术有限公司,保留所有权利