描述:
在工作中,其实用到权限认证的环境还挺多的,就想着做个小例子记录一把,留着以后复习。那就直奔主题了。
环境构建
1.创建SpringBoot项目
常规操作
目录结构如下
此为controller层,以及各种配置。Swagger大家不要管,只是为前端提供api查看以及测试。
实体层
业务层biz处理业务逻辑。
在本项目的pom文件中导入:
<!--shiro管理控制-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency>
web层需要用到biz层,biz层需要用实体层那么就引入,以web层为例:
这样web层的pom文件引入后就可以访问service层的接口了
<dependencies>
<dependency>
<groupId>com.zk</groupId>
<artifactId>zk-biz</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
2.构建实体类以及用户角色权限枚举类
底下也都是Model层内容:
构建出自己的pojo,一个POJOBase为所以对象基类,用到uid所以这里只截uid
用户权限枚举类,此权限直接是包含关系,你可以这样理解牛逼用户可以有普通用户的权限。
/**
* @Classname UserRole
* @Description 用户权限
* @Date 2019/12/30 10:14
* @Created by ZhangKai
*/
public enum UserRole {
//默认用户权限
// 普通用户
LEVE_0("0","普通用户"),
//牛逼用户
LEVE_1("1","牛逼用户"),
//未知权限
LEVE_999("999","未知权限");
private String code;
private String name;
UserRole(String code,String name){
this.code = code;
this.name =name;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
public static UserRole getEnumType(String key) {
UserRole[] alarmGrades = UserRole.values();
for (int i = 0; i < alarmGrades.length; i++) {
if (alarmGrades[i].getCode().equals(key)) {
return alarmGrades[i];
}
}
return UserRole.LEVE_999;
}
/**
* 根据Key得到枚举的Value
* Lambda表达式,比较判断(JDK 1.8)
*
* @param key
* @return
*/
public static UserRole getUserRole(String key) {
UserRole[] alarmGrades = UserRole.values();
UserRole result = Arrays.asList(alarmGrades).stream()
.filter(alarmGrade -> alarmGrade.getCode().equals(key))
.findFirst().orElse(UserRole.LEVE_999);
return result;
}
}
/**
* @Classname UserState
* @Description 用户状态
* @Date 2019/12/30 11:00
* @Created by ZhangKai
*/
public enum UserState {
//默认用户权限
// 普通用户
STATE_0("0","未登录"),
//牛逼用户
STATE_1("1","登录中"),
//未知权限
STATE_999("999","未知情况");
private String code;
private String name;
UserState(String code,String name){
this.code = code;
this.name =name;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
public static UserState getEnumType(String key)