P2P后台管理系统

P2P后台管理系统功能权限

需求

用户有这个权限,才能访问这个功能,例如

▪ 债权用户

有 合同管理 查看权限 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代码解读

全部教程