public class IniRightListener implements ApplicationListener,ServletContextAware { @Resource private RightService rs ; private ServletContext sc; public void onApplicationEvent(ApplicationEvent arg0) { if(arg0 instanceof ContextRefreshedEvent){ List<Right> rights = rs.findAllEntities(); Map<String, Right> map = new HashMap<String, Right>(); for(Right r : rights){ map.put(r.getRightUrl(), r); } if(sc != null){ sc.setAttribute("all_rights_map", map); } } } public void setServletContext(ServletContext servletContext) { this.sc = servletContext ; } }
public class User extends BaseEntity { private static final long serialVersionUID = -1225161383656943938L; private Integer id; private String email; private String name; private String password; private String nickName; private Date regDate = new Date(); private long[] rightSum; private boolean superAdmin; private Set<Role> roles = new HashSet<Role>(); public void calculateRightSum() { int pos = 0; long code = 0; for (Role role : roles) { if ("-1".equals(role.getRoleValue())) { this.superAdmin = true; roles = null; return; } for (Right r : role.getRights()) { pos = r.getRightPos(); code = r.getRightCode(); rightSum[pos] = rightSum[pos] | code; } } roles = null; } public boolean hasRight(Right r) { int pos = r.getRightPos(); long code = r.getRightCode(); return !((rightSum[pos] & code) == 0); } }
public class Role extends BaseEntity{ private static final long serialVersionUID = 8666491125061113331L; private Integer id; private String roleName; private String roleValue; private String roleDesc; private Set<Right> rights = new HashSet<Right>(); }
public class Right extends BaseEntity { private static final long serialVersionUID = 4066371171928834726L; private Integer id; private String rightName = ""; private String rightUrl; private String rightDesc; private long rightCode; private int rightPos; private boolean common ; }
public void saveOrUpdateRight(Right r){ int pos = 0 ; long code = 1L ; if(r.getId() == null){ String hql = "select max(r.rightPos),max(r.rightCode) from Right r " + "where r.rightPos = (select max(rr.rightPos) from Right rr)" ; Object[] arr = (Object[]) this.uniqueResult(hql); Integer topPos = (Integer) arr[0]; Long topCode = (Long) arr[1]; if(topPos == null){ pos = 0 ; code = 1L ; } else{ if(topCode >= (1L << 60)){ pos = topPos + 1 ; code = 1L ; } else{ pos = topPos ; code = topCode << 1 ; } } r.setRightPos(pos); r.setRightCode(code); } this.saveOrUpdateEntity(r); } public void appendRightByURL(String url){ String hql = "select count(*) from Right r where r.rightUrl = ?" ; Long count = (Long) this.uniqueResult(hql,url); if(count == 0){ Right r = new Right(); r.setRightUrl(url); this.saveOrUpdateRight(r); } }
public class RightFilterInterceptor implements Interceptor { private static final long serialVersionUID = 4230211839075439660L; public void destroy() { } public void init() { } public String intercept(ActionInvocation arg0) throws Exception { BaseAction action = (BaseAction) arg0.getAction(); ActionProxy proxy = arg0.getProxy(); String ns = proxy.getNamespace(); String actionName = proxy.getActionName(); if(ValidateUtil.hasRight(ns, actionName, ServletActionContext.getRequest(),action)){ return arg0.invoke(); } return "login" ; } }
public static boolean hasRight(String namespace,String actionName,HttpServletRequest req,BaseAction action){ if(!ValidateUtil.isValid(namespace) || "/".equals(namespace)){ namespace = "" ; } if(actionName.contains("?")){ actionName = actionName.substring(0, actionName.indexOf("?")); } String url = namespace + "/" + actionName ; HttpSession session = req.getSession(); ServletContext sc = session.getServletContext(); Map<String, Right> map = (Map<String, Right>) sc.getAttribute("all_rights_map"); Right r = map.get(url); if(r == null || r.isCommon()){ return true ; } else{ User user = (User) session.getAttribute("user"); if(user == null){ return false ; } else{ if(action != null && action instanceof UserAware){ ((UserAware)action).setUser(user); } if(user.isSuperAdmin()){ return true ; } else{ if(user.hasRight(r)){ return true ; } else{ return false ; } } } } }
public class ExtractAllRightsUtil { public static void main(String[] args) throws Exception { ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml"); RightService rs = (RightService) ac.getBean("rightService"); ClassLoader loader = ExtractAllRightsUtil.class.getClassLoader(); URL url = loader.getResource("com/surveypark/struts2/action"); File dir = new File(url.toURI()); File[] files = dir.listFiles(); String fname = "" ; for(File f : files){ fname = f.getName(); if(fname.endsWith(".class") && !fname.equals("BaseAction.class")){ processAction(fname,rs); } } } @SuppressWarnings("rawtypes") private static void processAction(String fname,RightService rs) { try { String pkgName = "com.surveypark.struts2.action" ; String simpleClassName = fname.substring(0, fname.indexOf(".class")); String className = pkgName + "." + simpleClassName ; //�õ������� Class clazz = Class.forName(className); Method[] methods = clazz.getDeclaredMethods(); Class retType = null ; String mname = null ; Class[] paramType = null ; String url = null ; for(Method m : methods){ retType = m.getReturnType(); mname = m.getName(); paramType = m.getParameterTypes(); if(retType == String.class && !ValidateUtil.isValid(paramType) && Modifier.isPublic(m.getModifiers())){ if(mname.equals("execute")){ url = "/" + simpleClassName ; } else{ url = "/" + simpleClassName + "_" + mname ; } rs.appendRightByURL(url); } } } catch (Exception e) { e.printStackTrace(); } } }
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!
相关推荐
让我们深入探讨Spring Security在处理角色和权限方面的一些关键概念。 1. **角色与权限基础** 在Spring Security中,"角色"是赋予用户的标识,表示用户在系统中的职责或权限集合。例如,"管理员"、"用户"等。"权限...
在"SpringSecurity权限管理开发手册.pdf"和"SpringSecurity权限管理开发手册.pdf.txt"中,你将找到更多关于如何配置和使用SpringSecurity进行权限管理的详细信息,包括配置XML或Java配置、定义访问规则、处理未授权...
整合EhCache,对Mybatis的二级缓存进行管理和对spring进行缓存管理 整合FastJson对指定http类型的数据进行转换 整合hibernate.validator校验器对controller接口参数进行校验 使用了springmvc统一异常处理 使用了...
该压缩包文件包含了一个基于SpringMVC、Hibernate和Spring框架的权限管理系统完整项目,适合学习和实战。这个项目的核心目标是实现对用户权限的有效管理,包括用户登录、角色分配、资源权限控制等功能。以下是关于...
Spring Security的权限管理主要依赖于角色(Role)和权限(Permission)的概念。角色是用来分组权限的,比如“管理员”、“用户”等,权限则是对特定资源的操作权限,如“查看”,“编辑”,“删除”等。我们可以...
该系统包括用户管理、角色管理、资源权限管理、基本数据管理模块;用户管理模块基于Spring Security的用户登录、退出操作,以及用户查询、添加、详情等操作;角色管理模块,通过权限关联与控制给用户赋予角色(管理员...
- Spring还包含大量模块,如Spring JDBC、Spring ORM(集成各种ORM框架),以及Spring Security,后者在权限角色系统中发挥关键作用。 3. **MyBatis**: - MyBatis是一个轻量级的持久层框架,解决了SQL与Java代码...
系统实现主要包括用户登录、权限验证、角色管理、权限管理、资源管理等功能。当用户尝试登录时,系统会通过核实其用户名和密码来确认其身份。权限验证时,根据用户的角色和权限信息,系统评估用户是否具备访问该资源...
本项目基于SpringCloud框架,提供了一套完整的前后端代码,包括权限管理和数据库设计,旨在帮助开发者快速搭建自己的权限管理平台。 SpringCloud作为微服务架构的首选框架,集合了众多子项目,如Eureka(服务注册与...
系统涵盖了用户管理、角色管理、菜单管理、资源管理等多个模块,支持用户登录、权限分配、日志记录等功能。 ## 项目的主要特性和功能 ### 用户管理 用户登录支持用户通过账号和密码进行登录,并生成JWT令牌进行...
**角色管理** 在Spring Security中,角色是权限的载体。用户可以被分配一个或多个角色,每个角色拥有特定的权限。角色通常通过`Role`枚举或者字符串(如"ROLE_USER", "ROLE_ADMIN")来表示。用户的角色信息存储在`...
本项目基于Spring,整合Spring的security模块,实现用户管理和权限控制,是一套较为通用的权限控制功能,主要内容如下: 1.登录,包括“记住我”的功能; 2.加密,存储的密码不采用明文,初始密码1234; 3.拦截器...
Vue.js与Spring Boot结合构建的权限管理系统是一种常见的现代Web应用架构模式。Vue.js是一个轻量级的前端JavaScript框架,以其组件化、响应式和易学习的特性受到开发者的喜爱;而Spring Boot是基于Spring框架的简化...
在基于数据库的权限管理配置中,Spring Security 允许我们存储、管理和验证用户的访问权限,这使得权限控制更加灵活和可扩展。下面将详细阐述如何进行Spring Security的数据库权限管理配置。 1. **配置数据源** 在...
本项目是一个关于Spring Boot权限管理的范例,旨在帮助开发者理解和实践如何在Spring Boot应用中实现权限控制。权限管理是任何企业级应用的重要组成部分,它确保用户只能访问他们被授权的数据和功能。 首先,我们...
这个“spring security权限管理开发手册及实例.rar”压缩包显然包含了关于如何使用Spring Security进行权限管理的详细指南和实际操作示例。让我们深入探讨一下Spring Security的核心概念、功能以及如何在实践中应用...
在这个“springboot springsecurity动态权限控制”的主题中,我们将深入探讨如何在Spring Boot项目中集成Spring Security,实现动态权限控制,让菜单权限的管理更加灵活和高效。 首先,我们需要理解Spring Security...
基于Spring MVC、Spring和MyBatis框架开发的权限角色系统,充分利用了这三个组件的优势,提供了高效、灵活且可扩展的解决方案。下面我们将深入探讨这些技术及其在权限角色系统中的应用。 首先,Spring MVC作为...
总结来说,本项目展示了如何利用SpringBoot、SpringSecurity和JPA在IntelliJ IDEA环境下构建一个完整的用户角色权限管理系统,通过security.sql和security-jpa这两个关键组件,实现了数据初始化和核心业务逻辑的构建...