需求
用戶有這個權限,才能訪問這個功能,例如
有 合同管理 查看權限 http://localhost:9600/p2p-admin/admin/contract
沒有 輪播圖 查看權限 http://localhost:9600/p2p-admin/admin/slideShow
沒有 合同管理 查看權限 http://localhost:9600/p2p-admin/admin/contract
有 輪播圖 查看權限 http://localhost:9600/p2p-admin/admin/slideShow
? 用戶登錄成功后,會將用戶擁有的權限獲得
? 當用戶訪問某一個功能的時候,會發起對應的url請求
? 使用攔截器對請求進行攔截
? 在攔截器中,從用戶擁有的權限中,判斷是否包含該請求的URL,如果包含繼續訪問,否則沒有權限
⒈在16-p2p-admin中創建SlideShowController類,并提供slideShow方法,接收跳轉到輪播圖頁面的請求
@Controller
public class SlideShowController {
@RequestMapping("/admin/slideShow")
public String slideShow(){
return "slideShow";
}
}
⒉在16-p2p-admin中創建ContractController類,并提供contract方法,接收跳轉合同頁面的請求
Controller
public class ContractController {
@RequestMapping("/admin/contract")
public String contract(){
return "contract";
}
}
⒊拷貝profile.jsp,命名為slideShow.jsp,修改paga-content的div里面的內容為輪播圖列表(模擬)
<div class="page-content">
<h1>輪播圖列表</h1>
</div>
⒋拷貝profile.jsp,命名為contract.jsp,修改paga-content的div里面的內容為輪播圖列表(模擬)
<div class="page-content">
<h1>合同列表</h1>
</div>
⒌在16-p2p-admin的com.bjpowernode.p2p.admin.interceptor包下創建PermissionInterceptor類,并重寫preHandle方法
public class PermissionInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
//獲取用戶在頁面上請求的URI /項目上下文/admin/contract
String requestURI = request.getRequestURI();
//從session獲取用戶
UserInfo userInfo = (UserInfo) request.getSession().getAttribute(Constants.SESSION_USER);
//獲取用戶擁有的菜單權限
List<PermissionInfo> menuPermissionInfoList = userInfo.getMenuPermissionInfoList();
//獲取用戶擁有的功能權限
List<PermissionInfo> buttonPermissionInfoList = userInfo.getButtonPermissionInfoList();
//對用戶擁有的菜單權限進行遍歷
for (PermissionInfo permissionInfo : menuPermissionInfoList) {
//用戶擁有的菜單權限對應的URL /admin/contract
String url = permissionInfo.getUrl();
//如果菜單權限URL不為空,并且用戶請求的URI包含用戶擁有的url,說明有訪問該請求的權限,繼續訪問
if (StringUtils.isNotEmpty(url) && requestURI.indexOf(url) >=0){
return true;
}
}
//對用戶擁有的功能權限進行遍歷
for (PermissionInfo permissionInfo : buttonPermissionInfoList) {
//用戶擁有的按鈕權限對應的URL /admin/contract
String url = permissionInfo.getUrl();
//如果按鈕權限URL不為空,并且用戶請求的URI包含用戶擁有的url,說明有訪問該請求的權限,繼續訪問
if (StringUtils.isNotEmpty(url) && requestURI.indexOf(url) >=0){
return true;
}
}
//如果執行到這里,說明沒有訪問該請求的權限,不在繼續訪問,重定向到提示頁面
response.sendRedirect(request.getContextPath() +"/admin/refuse");
return false;
}
}
⒍在IndexController中添加refuse方法,跳轉到沒有權限提示頁面
/**
* 跳轉到權限不足提示頁面
*/
@RequestMapping("/admin/refuse")
public String refuse(){
return "refuse";
}
⒎拷貝contract.jsp,命名為refuse.jsp,修改paga-content的div里面的內容為權限不足,無法訪問
<div class="page-content">
<h1>權限不足,無法訪問</h1>
</div>
⒏為了讓攔截器生效,需要攔截器配置類,在16-p2p-admin的com.bjpowernode.p2p.admin.config包下創建WebMVCConfig類
@Configuration
public class WebMVCConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//要攔截的路徑
String[] patterns = {
"/**"
};
//不需要權限攔截的url,也就是公共url,任何用戶登錄后都可以訪問
String[] excludePathPatternsForPermission = {
"/admin/login",
"/admin/logout",
"/admin/profile",
"/",
"/admin/refuse",
"/assets/**",
"/js/**"
};
//權限攔截器
registry.addInterceptor(new PermissionInterceptor()).addPathPatterns(patterns)
.excludePathPatterns(excludePathPatternsForPermission);
}
}
⒐登錄不同的用戶,訪問用戶沒有權限的功能進行測試
? 底層mapper涉及跨庫查詢,如果不同的庫在同一個IP和端口下,是可以通過庫名.表名的方式直接查詢的
? 有兩個地方可以生成合同,頁面和定時任務
? 調用webservice流程
? e-seal生成pdf代碼解讀