`
knight_black_bob
  • 浏览: 855143 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring 权限角色管理

阅读更多

 

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捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

分享到:
评论

相关推荐

    springsecurity角色和权限

    让我们深入探讨Spring Security在处理角色和权限方面的一些关键概念。 1. **角色与权限基础** 在Spring Security中,"角色"是赋予用户的标识,表示用户在系统中的职责或权限集合。例如,"管理员"、"用户"等。"权限...

    SpringSecurity权限管理

    在"SpringSecurity权限管理开发手册.pdf"和"SpringSecurity权限管理开发手册.pdf.txt"中,你将找到更多关于如何配置和使用SpringSecurity进行权限管理的详细信息,包括配置XML或Java配置、定义访问规则、处理未授权...

    spring+springmvc+mybatis项目案例实现用户角色权限管理

    整合EhCache,对Mybatis的二级缓存进行管理和对spring进行缓存管理 整合FastJson对指定http类型的数据进行转换 整合hibernate.validator校验器对controller接口参数进行校验 使用了springmvc统一异常处理 使用了...

    权限管理系统springmvc hibernate spring 完整项目带数据库

    该压缩包文件包含了一个基于SpringMVC、Hibernate和Spring框架的权限管理系统完整项目,适合学习和实战。这个项目的核心目标是实现对用户权限的有效管理,包括用户登录、角色分配、资源权限控制等功能。以下是关于...

    spring security权限管理

    Spring Security的权限管理主要依赖于角色(Role)和权限(Permission)的概念。角色是用来分组权限的,比如“管理员”、“用户”等,权限则是对特定资源的操作权限,如“查看”,“编辑”,“删除”等。我们可以...

    基于springcloud+springboot+vue搭建的权限管理系统

    该系统包括用户管理、角色管理、资源权限管理、基本数据管理模块;用户管理模块基于Spring Security的用户登录、退出操作,以及用户查询、添加、详情等操作;角色管理模块,通过权限关联与控制给用户赋予角色(管理员...

    权限角色系统,基于(spring mvc、 spring、 mybatis)框架开发

    - Spring还包含大量模块,如Spring JDBC、Spring ORM(集成各种ORM框架),以及Spring Security,后者在权限角色系统中发挥关键作用。 3. **MyBatis**: - MyBatis是一个轻量级的持久层框架,解决了SQL与Java代码...

    通用权限管理系统+springboot+mybatis plus+spring security+jwt+redis+mysql

    系统实现主要包括用户登录、权限验证、角色管理、权限管理、资源管理等功能。当用户尝试登录时,系统会通过核实其用户名和密码来确认其身份。权限验证时,根据用户的角色和权限信息,系统评估用户是否具备访问该资源...

    权限管理系统SpringCloud框架 ,前后端的 代码,权限代码,框架说明,数据库,

    本项目基于SpringCloud框架,提供了一套完整的前后端代码,包括权限管理和数据库设计,旨在帮助开发者快速搭建自己的权限管理平台。 SpringCloud作为微服务架构的首选框架,集合了众多子项目,如Eureka(服务注册与...

    (源码)基于Spring Boot和Spring Cloud的权限管理系统.zip

    系统涵盖了用户管理、角色管理、菜单管理、资源管理等多个模块,支持用户登录、权限分配、日志记录等功能。 ## 项目的主要特性和功能 ### 用户管理 用户登录支持用户通过账号和密码进行登录,并生成JWT令牌进行...

    spring权限管理

    **角色管理** 在Spring Security中,角色是权限的载体。用户可以被分配一个或多个角色,每个角色拥有特定的权限。角色通常通过`Role`枚举或者字符串(如"ROLE_USER", "ROLE_ADMIN")来表示。用户的角色信息存储在`...

    整合Spring+Spring security基于RBAC模型实现通用的权限控制和用户管理系统(适合新手了解学习权限相关技术)

    本项目基于Spring,整合Spring的security模块,实现用户管理和权限控制,是一套较为通用的权限控制功能,主要内容如下: 1.登录,包括“记住我”的功能; 2.加密,存储的密码不采用明文,初始密码1234; 3.拦截器...

    vue,spring boot权限管理系统.rar

    Vue.js与Spring Boot结合构建的权限管理系统是一种常见的现代Web应用架构模式。Vue.js是一个轻量级的前端JavaScript框架,以其组件化、响应式和易学习的特性受到开发者的喜爱;而Spring Boot是基于Spring框架的简化...

    Spring Security 基于数据库的权限管理配置

    在基于数据库的权限管理配置中,Spring Security 允许我们存储、管理和验证用户的访问权限,这使得权限控制更加灵活和可扩展。下面将详细阐述如何进行Spring Security的数据库权限管理配置。 1. **配置数据源** 在...

    Spring Boot 权限管理范例项目

    本项目是一个关于Spring Boot权限管理的范例,旨在帮助开发者理解和实践如何在Spring Boot应用中实现权限控制。权限管理是任何企业级应用的重要组成部分,它确保用户只能访问他们被授权的数据和功能。 首先,我们...

    spring security权限管理开发手册及实例.rar

    这个“spring security权限管理开发手册及实例.rar”压缩包显然包含了关于如何使用Spring Security进行权限管理的详细指南和实际操作示例。让我们深入探讨一下Spring Security的核心概念、功能以及如何在实践中应用...

    springboot springsecurity动态权限控制

    在这个“springboot springsecurity动态权限控制”的主题中,我们将深入探讨如何在Spring Boot项目中集成Spring Security,实现动态权限控制,让菜单权限的管理更加灵活和高效。 首先,我们需要理解Spring Security...

    权限角色系统,基于(spring mvc,spring,mybatis)框架开发

    基于Spring MVC、Spring和MyBatis框架开发的权限角色系统,充分利用了这三个组件的优势,提供了高效、灵活且可扩展的解决方案。下面我们将深入探讨这些技术及其在权限角色系统中的应用。 首先,Spring MVC作为...

    SpringBoot + SpringSecurity + JPA 实现用户角色权限登录认证

    总结来说,本项目展示了如何利用SpringBoot、SpringSecurity和JPA在IntelliJ IDEA环境下构建一个完整的用户角色权限管理系统,通过security.sql和security-jpa这两个关键组件,实现了数据初始化和核心业务逻辑的构建...

Global site tag (gtag.js) - Google Analytics