权限模块公共组件

本文介绍了如何构建权限模块的公共组件,包括权限注释、权限认证异常处理、认证登录用户的实体定义、认证接口设计以及认证登录上下文的实现。详细讲解了各部分的创建过程,如权限注释类、权限认证异常枚举和异常类的配置,以及登录用户实体和服务接口的定义。
摘要由CSDN通过智能技术生成

权限模块公共组件

权限注释

  • 创建权限注释类
package com.common.platform.auth.annotation;

import java.lang.annotation.*;
/*
权限注释,用于检查权限,规定访问权限
@example @Permission({role1,role2})
@example @Permission

 */
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Permission {
    String [] value() default  {};

}

权限认证异常

  • 创建权限认证异常枚举类;
  • 创建权限认证异常类;
  • 创建权限异常类
    配置 AuthException文件
package com.common.platform.auth.exception;

import com.common.platform.base.exception.AbstractBaseExceptionEnum;

/*
 * 认证失败(账号密码错误、账号冻结、token过期等)
 * */
public class AuthException extends RuntimeException{
    private Integer code;
    private  String  errorMessage;
    public AuthException(){
        super("认证失败");
        this.code = 500;
        this.errorMessage = "认证失败";
    }
    public AuthException(AbstractBaseExceptionEnum exception){
        super(exception.getMessage());
        this.code = exception.getCode();
        this.errorMessage = exception.getMessage();
    }
}

配置PermissionException文件

package com.common.platform.auth.exception;

import com.common.platform.base.exception.AbstractBaseExceptionEnum;
import lombok.Data;

/*
权限异常(进行增删改查时没有权限)
 */
@Data
public class PermissionException extends RuntimeException{
    private Integer code;
    private String errorMessage;
    public PermissionException(){
        super("权限异常");
        this.code = 500;
        this.errorMessage = "权限异常";
    }
    public PermissionException(AbstractBaseExceptionEnum exception){
        super(exception.getMessage());
        this.code = exception.getCode();
        this.errorMessage = exception.getMessage();
    }
}

配置AuthExceptionEnum文件

package com.common.platform.auth.exception.enums;

import com.common.platform.base.exception.AbstractBaseExceptionEnum;
import lombok.Getter;

@Getter
public enum AuthExceptionEnum implements AbstractBaseExceptionEnum {
    NOT_LOGIN_ERROR(1401,"用户未登录"),
    USERNAME_PWD_ERROR(1402,"账号密码错误"),
    LONGIN_EXPIRED(1403,"登录已过期,请重新登录"),
    ACCOUNT_FREEZE_ERROR(1404,"账号被冻结"),
    NOT_ROLE_ERROR(1405,"用户没有分配角色,获取数据失败"),
    VALID_CODE_ERROR(1406,"验证码错误"),
    NO_PERMISSION(1407,"没有访问权限"),
    SESSION_TIMEOUT(1408,"登录会话超时");

    AuthExceptionEnum(int code,String message){
    this.code = code;
    this.message = message;
}
    private Integer code;
    private String message;



    @Override
    public Integer getCode() {
        return null;
    }

    @Override
    public String getMessage() {
        return null;
    }
}

认证登录用户实体

  • 创建认证登录用户实体
    配置LoginUser文件
package com.common.platform.auth.pojo;

import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Setter
@Getter
public class LoginUser implements Serializable {
    /*
    用户主键ID
     */
    private Long id;
    /*
    用户账号
     */
    private String account;
    /*
    用户姓名
     */
    private String name;
    /*
    用户邮箱
     */
    private String email;
    /*
    用户头像
     */
    private String avatar;
    /*
    部门ID
     */
    private Long deptId;
    /*
    角色列表
     */
    private List<Long> roleList;
    /*
    部门名称
     */
    private String deptName;
    /*
    角色名称列表
     */
    private List<String> roleNames;
    /*
    角色备注(code)
     */
    private List<String> roleTips;
    /*
    系统标识
     */
    private List<Map<String ,Object>> systemTypes;
    /*
    拥有权限
     */
    private Set<String> permissions;

}

认证接口

  • 创建认证接口
    配置AuthService文件
package com.common.platform.auth.service;

import cn.hutool.core.lang.copier.SrcToDestCopier;
import com.common.platform.auth.pojo.LoginUser;

import java.util.List;

public interface AuthService {
    /**
     * 登录
     *
     * @param username 账号
     * @param password 密码
     * @return token
     */
     String login(String username,String password);
    /**
     * 登录(直接用账号登录)
     *
     * @param username 账号
     * @return token
     */
    String login(String username);
    /**
     * 创建登录cookie
     */
    void addLoginCookie(String token);

    /**
     * 退出当前用户
     */
    void logout();

    /**
     * 退出
     */
    void logout(String token);

    /**
     * 根据账号获取登录用户
     *
     * @param account 账号
     */
    LoginUser user(String account);

    /**
     * 获取权限列表通过角色id
     *
     * @param roleId 角色id
     */
    List<String> findPermissionsByRoleId(Long roleId);

    /**
     * 检查当前登录用户是否拥有指定的角色访问当
     *
     * @param roleNames 角色名称集合
     */
    boolean check(String[] roleNames);

    /**
     * 检查当前登录用户是否拥有当前请求的servlet的权限
     */
    boolean checkAll();

}

认证登录上下文

  • 创建认证登录上下文接口;
  • 创建获取认证登录上下文类;
    配置LoginContext文件
package com.common.platform.auth.context;

import com.common.platform.auth.pojo.LoginUser;

import java.util.List;

public interface LoginContext {
    /**
     * 获取当前登录用户
     */
    LoginUser getUser();

    /**
     * 获取当前登录用户的token
     */
    String getToken();

    /**
     * 是否登录
     */
    boolean hasLogin();

    /**
     * 获取当前登录用户id
     */
    Long getUserId();

    /**
     * 验证当前用户是否包含该角色
     */
    boolean hasRole(String roleName);

    /**
     * 验证当前用户是否属于以下任意一个角色
     */
    boolean hasAnyRoles(String roleNames);

    /**
     * 验证当前用户是否拥有指定权限
     */
    boolean hasPermission(String permission);

    /**
     * 判断当前用户是否是超级管理员
     */
    boolean isAdmin();

    /**
     * 获取当前用户的部门数据范围的集合
     */
    List<Long> getDeptDataScope();

}


配置LoginContextHolder文件

package com.common.platform.auth.context;

import com.common.platform.base.config.context.SpringContextHolder;
/*
获取当前登录上下文接口
 */
public class LoginContextHolder {
    public static LoginContext getContext() {
        return SpringContextHolder.getBean(LoginContext.class);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值