在后臺管理系統中,權限控制是比較復雜的功能了,講解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.bjpowernode.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;