/** 根据用户访问的uri,加载该uri所需要角色列表 Object object:uri地址 */ public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException { // 最初请求的uri格式:/crm/index.jsp // object 是一个URL ,为用户请求URL String url = ((FilterInvocation) object).getRequestUrl().trim(); if ("/".equals(url)) { return null; } int firstQuestionMarkIndex = url.indexOf("?"); if (firstQuestionMarkIndex == -1) firstQuestionMarkIndex = url.length(); // 判断请求是否带有参数 如果有参数就去掉后面的后缀和参数(/index.do --> /index) if (firstQuestionMarkIndex != -1) { url = url.substring(0, firstQuestionMarkIndex); } // 最终形成的uri 格式:/index if (url.startsWith("/")) { url = url.substring(1); } // 当前有用户,通过URL 获得资源 ,并写入日志里面 TUserLog userLog = new TUserLog(); if (null != UserSession.get("user")) { TUser user = (TUser) UserSession.get("user"); userLog.setIUser(user.getId()); userLog.setVcUserName(user.getVcAccount()); } String desc = resourceService.getResourceDescByUrl(url); userLog.setVcDesc(desc); // 把用户 时间 操作描述 保存到日志表里 String ip = (String) UserSession.get("ip"); userLog.setVcIp(ip); userLogService.saveLog(userLog); Iterator<String> ite = resourceMap.keySet().iterator(); // 取到请求的URL后与上面取出来的资源做比较 while (ite.hasNext()) { String resURL = ite.next().trim(); if (url.equals(resURL)) { // 获得该uri所需要的角色列表 return resourceMap.get(resURL); } } // 如果数据库里面没有该uri的信息,表示该uri不需要经过权限验证了 return null; }