权限模块公共组件
权限注释
- 创建权限注释类
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);
}
}