在后台管理系统中,权限控制是比较复杂的功能了,讲解RBAC权限模型
项目原型搭建
用户登录
获取用户菜单权限及按钮权限
7天内免登陆
个人中心页面中,根据登录用户拥有的菜单权限显示菜单
功能权限(按钮权限的控制)
① 创建Springboot项目16-p2p-admin
② 在16-p2p-admin的pom.xml中配置基础依赖
根据我们的技术选型,需要添加Jsp,Mybatis相关依赖
<dependencies>
<!--SpringBoot开发web项目起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBoot测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--引入Spring Boot内嵌的Tomcat对JSP的解析包,必须加,否则不能解析jsp页面-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!-- servlet依赖的jar包start ,可选-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<!-- servlet依赖的jar包end -->
<!-- jsp依赖jar包start ,可选-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
<!-- jsp依赖jar包end -->
<!--jstl标签依赖的jar包start ,可选-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--jstl标签依赖的jar包end -->
<!--热部署插件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- 加载mybatis整合springboot -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<!--在springboot的父工程中没有指定版本,我们需要手动指定-->
<version>1.3.2</version>
</dependency>
<!-- MySQL的jdbc驱动包 -->
<dependency>
<groupId>mysql</groupId>
<!--在springboot的父工程中指定了版本,我们就不需要手动指定了-->
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- commons-lang依赖jar包 -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
③ 在16-p2p-admin的pom.xml文件中添加将指定资源编译到classpath的配置
<resources>
<!--mybatis的mapper.xml-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--src/main/resources下的所有配置文件编译到classes下面去-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
<resource>
<!--指定将jsp编译到指定位置-->
<directory>src/main/webapp</directory>
<!--编译到META-INF/resources,该目录不能随便写-->
<targetPath>META-INF/resources</targetPath>
<includes>
<!--要把哪些文件编译过去,**表示webapp目录及子目录,*.*表示所有-->
<include>**/*.*</include>
</includes>
</resource>
</resources>
④ 在16-p2p-admin的核心配置文件application.properties中配置项目端口及上下文
#配置Spring boot内嵌的tomcat的端口号
server.port=9600
#配置项目访问工程名
server.servlet.context-path=/p2p-admin
⑤ 在16-p2p-admin的核心配置文件application.properties中配置SpringBoot使用JSP展示数据
#配置springmvc视图展示层访问前缀,/斜杠表示访问src/main/webapp目录下的jsp页面
spring.mvc.view.prefix=/WEB-INF/jsp/
#配置springmvc视图展示层访问后缀,.jsp表示是jsp页面
spring.mvc.view.suffix=.jsp
⑥ 在16-p2p-admin的核心配置文件application.properties中配置数据库连接信息
#配置数据库连接(p2padmin)
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/p2padmin?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
⑦ 在16-p2p-admin下创建webapp/WEB-INF/jsp目录,并指定为WebResources Directory
⒉基于ACE搭建项目原型
① 从ACE原型中拷贝登录页面login.html,修改为index.jsp
添加jsp头信息
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
② 将ACE需要的js和css导入到我们的16-p2p-admin中
③ 放到webapp的WEB-INF目录下,WEB-INF下的资源是受保护的,不能直接访问。在16-p2p-admin的com.sxbdqn.p2p.admin.controller包下创IndexController,并提供index方法,用于跳转到登录页面
@Controller
public class IndexController {
@RequestMapping("/")
public String index(){
return "index";
}
}
④ 参照已有p2p-admin进行修改,独立将ACE页面原型改造成我们项目的原型(培养这种能力)
① 拷贝逆向工程文件到16-p2p-admin中
② 在pom.xml文件中添加反向工程插件
<!--mybatis代码自动生成插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!--配置文件的位置-->
<configurationFile>GeneratorMapper.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
③ 修改GeneratorMapper.xml生成用户UserInfo相关model和mapper
④ 修改GeneratorMapper.xml生成权限PermissionInfo相关model和mapper
⑤ 在生成的Mapper接口上添加@Mapper注解,被SpringBoot扫描到
⑥ 为了操作方便,在UserInfo中添加上两个属性,代表用户所拥有的菜单权限和按钮权限,并提供get|set方法
//当前用户拥有的所有菜单权限
private List<PermissionInfo> menuPermissionInfoList;
//当前用户拥有的所有按钮权限
private List<PermissionInfo> buttonPermissionInfoList;