需求
用户有这个权限,才能访问这个功能,例如
有 合同管理 查看权限 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.sxbdqn.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.sxbdqn.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代码解读