- 浏览: 950781 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (423)
- mysql (37)
- hibernate (3)
- struts (9)
- spring (33)
- dom4j (2)
- junit (0)
- exception (1)
- 随笔杂谈 (12)
- google app engine (1)
- XMPP (1)
- OAuth安全授权 (1)
- 版本控制 (8)
- 心情感悟 (0)
- core java (19)
- log4j (7)
- jquery (12)
- javascript (10)
- 网站性能优化及工具 (11)
- 服务器架设配置等 (38)
- EXT (4)
- 正则表达式 (5)
- 日志统计分析 (2)
- htmlparse (4)
- httpclient (5)
- java随笔 (5)
- dhtmlxtree (1)
- freemarke (5)
- memcached (6)
- javamail (5)
- Linux命令 (10)
- 应用监控cpu web jdbc等 (4)
- jmagick (9)
- 第三方缓存策略 (9)
- ORM (2)
- hadoop (2)
- 大数据量处理 (8)
- 经典 (1)
- 权限设计 (1)
- andriod (1)
- mybatis (12)
- redis (24)
- 数据结构_算法 (5)
- 分布式系统 (1)
- php (1)
- 网络编程 (3)
- 服务器部署 (3)
- ios (2)
- IM (23)
- mina (1)
- 视讯和语音 (1)
- 代码生成 (1)
- 架构 (4)
- 建模工具 (1)
- oracle (4)
- solr (10)
- 构建工具 (7)
- html5 (1)
- nginx (5)
- css (1)
- 大数据-分布式 (2)
- 设计模式 (2)
- mq (2)
- jvm调优 (8)
- 并发编程 (2)
- 搜索引擎 (1)
- UML (2)
最新评论
-
天使建站:
jquery获取网页里多选框checkbox选中项的值的方法及 ...
JS jQuery分别获取选中的复选框值 -
abao1:
发现一个小问题 sortAndSave方法中的for循环 第二 ...
完整java实现外部排序 -
西巴拉古呀那:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
消息系统kafka介绍 -
kafodaote:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
消息系统kafka介绍 -
成大大的:
Kafka分布式消息系统实 ...
消息系统kafka介绍
在几乎所有的web应用中都需要对访问者(用户)进行权限管理, 因为我们希望某些页面只对特定的用户开放, 以及某些操作只有符合身份的用户才能进行。这之中涉及到了身份验证和权限管理. 只有单用户系统和多用户单权限系统才不需要权限管理。
在本文中, 使用了基于组的权限管理, 并在Spring框架下利用HandlerInterceptorAdapter和Hibernate进行实现。
User的结构是:
public class User { private int id; private String name; private String password; private Set<String> groups = new HashSet<String>(); }
UserGroup表:
user:intgroup:String使用联合主键, 在Java
中没有对应的类。
Hibernate映射文件是:
<hibernate-mapping auto-import="true" default-lazy="false"> <class name="net.ideawu.User" table="User"> <cache usage="read-write" /> <id name="id" column="id"> <generator class="native"/> </id> <property name="name" column="name"/> <property name="password" column="password"/> <set name="groups" table="UserGroup" cascade="save-update" lazy="false"> <key column="user" /> <element column="`group`" type="string" /> </set> </class> </hibernate-mapping>
一切的身份验证交给一个继承HandlerInterceptorAdapter的类来做:
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import org.springframework.web.util.UrlPathHelper; import org.springframework.util.AntPathMatcher; import org.springframework.util.PathMatcher; ... public class AuthorizeInterceptor extends HandlerInterceptorAdapter { private UrlPathHelper urlPathHelper = new UrlPathHelper(); private PathMatcher pathMatcher = new AntPathMatcher(); private Properties groupMappings; /** * Attach URL paths to group. */ public void setGroupMappings(Properties groupMappings) { this.groupMappings = groupMappings; } public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String url = urlPathHelper.getLookupPathForRequest(request); String group = lookupGroup(url); // 找出资源所需要的权限, 即组名 if(group == null){ // 所请求的资源不需要保护. return true; } // 如果已经登录, 一个User实例被保存在session中. User loginUser = (User)request.getSession().getAttribute("loginUser"); ModelAndView mav = new ModelAndView("system/authorizeError"); if(loginUser == null){ mav.addObject("errorMsg", "你还没有登录!"); throw new ModelAndViewDefiningException(mav); }else{ if(!loginUser.getGroups().contains(group)){ mav.addObject("errorMsg", "授权失败! 你不在 <b>" + group + "</b> 组!"); throw new ModelAndViewDefiningException(mav); } return true; } } /* * 查看 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping.lookupHandler() * Ant模式的最长子串匹配法. */ private String lookupGroup(String url){ String group = groupMappings.getProperty(url); if (group == null) { String bestPathMatch = null; for (Iterator it = this.groupMappings.keySet().iterator();it.hasNext();) { String registeredPath = (String) it.next(); if (this.pathMatcher.match(registeredPath, url) && (bestPathMatch == null || bestPathMatch.length() <= registeredPath.length())) { group = this.groupMappings.getProperty(registeredPath); bestPathMatch = registeredPath; } } } return group; } }
下面我们需要在Spring的应用上下文配置文件中设置:
<bean id="authorizeInterceptor" class="net.ideawu.AuthorizeInterceptor"> <property name="groupMappings"> <value> <!-- Attach URL paths to group --> /admin/*=admin </value> </property> </bean> <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="interceptors"> <list> <ref bean="authorizeInterceptor" /> </list> </property> <property name="mappings"> <value> /index.do=indexController /browse.do=browseController /admin/removeArticle.do=removeArticleController </value> </property> </bean>
注意到"/admin/*=admin", 所以/admin目录下的所有资源只有在admin组的用户才能访问, 这样就不用担心普通访客删除文章了。使用这种方法, 你不需要在removeArticleController中作身份验证和权限管理, 一切都交给AuthorizeInterceptor。
发表评论
-
各种数据库(oracle、mysql、sqlserver等)在Spring中数据源的配置和JDBC驱动包
2013-07-16 13:09 2833在开发基于数据库的应 ... -
springmvc rest框架搭建中遇到的问题-xml转换错误
2013-01-18 11:26 2009.bean to xml显示的xml不是我往Model ... -
spring3.5 mvc json view bug MappingJacksonJsonView
2013-01-18 11:27 1546在返回单一model的json的时候。 MappingJa ... -
Spring MVC的多视图解析器配置及与Freemarker的集成
2013-01-18 11:27 3688http://my249645546.iteye.com/ ... -
xStream完美转换XML、JSON
2013-01-17 16:02 1259http://www.cnblogs.com/hoojo/a ... -
SpringMVC 中整合JSON、XML视图一
2013-01-17 16:01 1377http://www.cnblogs.com/hoojo/a ... -
Spring MVC 之 视图解析器ResourceBundleViewResolver
2013-01-17 10:45 1282http://blog.csdn.net/q34982 ... -
spring3mvc自定义多视图解析器
2013-01-17 10:41 1666使用视图名后缀来判断选择相应的视图解析器自定义一个视图解析器 ... -
spring3.0.6 使用context:property-placeholder载不进属性
2012-12-15 14:43 1382我用spring3.0.6+mybatis3.0.6+myba ... -
Spring定时任务的多种使用方法总结
2012-10-18 09:48 1734这里使用的是Spring2.5,需要的jar包:spring. ... -
Spring3.0 + 自定义注解实现操作日志记录功能
2012-03-12 09:34 1499最近项目组长分配给我一个任务,让我完成一个操作日志的管理功能。 ... -
spring mvc例子
2012-03-11 11:35 2081使用拦截器 和Struts2一样,Spring MVC也可以 ... -
在 Spring Bean 內取得 HttpServletRequest
2011-10-11 16:13 1233使用 Java 去開發 Web 應用程式時,大部份時候都會使用 ... -
spring3+freemark自定义标签
2011-10-09 18:27 2761<bean id="viewResolver& ... -
OpenSessionInViewFilter作用及配置
2011-06-15 10:31 1340摘自:http://www.yybean.com/opense ... -
spring httpinvoke 例子
2011-04-21 17:15 1211http://ajava.org/course/open/11 ... -
Spring基于注解的缓存配置--EHCache AND OSCache
2011-04-02 23:38 2346本文将构建一个普通工程来说明spring注解缓存的使用方式,关 ... -
使用 ActiveMQ 示例
2011-03-30 17:38 1370企业中各项目中相互协作的时候可能用得到消息通知机制。比如有 ... -
使用Spring HTTP invoker进行远程调用
2011-03-30 10:34 1700使用Spring HTTP invoker进行远程调用Spri ... -
Java Spring2.5 Remote Invoke HTTP Invoker远程调用
2011-03-30 08:42 1980近日,一个项目涉及到系统间接口调用,考虑到系统间用的都是j ...
相关推荐
本文将详细讨论如何在基于Spring框架的应用中实现权限控制系统,重点介绍Acegi安全框架的使用及其在权限管控方面的解决方案。 首先,我们要了解Spring框架的核心特点。Spring框架通过控制反转(IoC)和面向切面编程...
本项目基于SpringCloud框架,提供了一套完整的前后端代码,包括权限管理和数据库设计,旨在帮助开发者快速搭建自己的权限管理平台。 SpringCloud作为微服务架构的首选框架,集合了众多子项目,如Eureka(服务注册与...
一款基于Spring Cloud Alibaba的权限管理系统,集成市面上流行库,可以作用为快速开发的一个框架使用 一套以微服务架构的脚手架,使用Spring Boot Alibaba系列进行架构,学习并了解它将能快速掌握微服务核心基础。 此...
基于Spring Boot框架的权限管理系统 项目简介 本项目是一个基于Spring Boot框架的权限管理系统,旨在提供一个高效、灵活的用户权限管理解决方案。系统涵盖了用户管理、角色管理、菜单管理等多个模块,支持用户...
【描述】:该系统设计的核心目标是实现用户角色的管理和权限分配,使得不同用户或用户组能访问不同的系统资源。通过Spring框架,我们可以实现依赖注入,简化代码维护和测试;Spring MVC则负责处理HTTP请求,提供视图...
# 基于Spring Security框架的RBAC权限管理系统 ## 项目简介 本项目是一个基于Spring Security框架的RBAC(RoleBased Access Control)权限管理系统。通过整合Spring Security,实现了对用户权限的精细化控制。系统...
在基于数据库的权限管理配置中,Spring Security 允许我们存储、管理和验证用户的访问权限,这使得权限控制更加灵活和可扩展。下面将详细阐述如何进行Spring Security的数据库权限管理配置。 1. **配置数据源** 在...
SSM(Spring+SpringMVC+Mybatis)权限管理系统是一个基于Java Web技术的全面权限管理解决方案,它结合了Spring框架的 IoC(Inversion of Control)容器、SpringMVC作为 MVC(Model-View-Controller)架构的实现以及...
- **用户管理**:创建、修改、删除用户,管理用户的角色和权限。 - **角色管理**:定义角色,分配权限,一个角色可以拥有多个权限。 - **权限管理**:定义权限,包括访问资源的权限和操作资源的权限。 - **登录认证*...
后端使用SpringBoot框架进行业务逻辑开发,利用Spring Security实现权限控制。数据库采用MySQL进行数据存储,使用MyBatis进行数据访问。 权限控制模块设计包括用户、角色和权限三个主要模块。用户模块用于管理用户...
基于Spring Cloud框架的权限管理系统 内容概要 本项目是一个基于Spring Cloud框架的权限管理系统,旨在提供一个高效、灵活且易于扩展的微服务架构解决方案。系统支持前后端分离,后端开发专注于服务实现,前端开发...
# 基于Spring Boot和Vue的后台权限管理系统 ## 项目简介 本项目是一个基于Spring Boot和Vue的后台权限管理系统,旨在提供一个高效、安全且易于扩展的后台管理系统。系统集成了Spring Security、JWT、Redis和MySQL...
综上所述,本项目通过SSM框架和RBAC模型,构建了一个用户权限管理系统,不仅能够实现基础的用户管理和权限分配,还能通过Spring Security进行精细的权限拦截,确保系统安全。这种设计模式在现代企业级应用中非常常见...
基于Spring Boot框架的用户管理系统 项目简介 本项目是一个基于Spring Boot框架的用户管理系统,旨在提供一个高效、易扩展的用户管理解决方案。系统集成了Spring Data JPA、Redis、Swagger等技术,支持复杂SQL...
该项目旨在提供一套高效、安全的后端服务框架,用于实现用户权限的精细化管理。 首先,Spring Boot 2.7是Spring框架的一个轻量级版本,它简化了Java应用的开发过程,通过内嵌的Tomcat服务器和自动配置功能,使得...
基于Spring Boot和Shiro框架的权限管理系统 内容概要 本项目是一个基于Spring Boot和Shiro框架的权限管理系统,实现了前后端分离的权限控制,支持按钮和接口级别的细粒度权限管理。系统采用RBAC(基于角色的访问...
本项目基于Spring,整合Apache Shiro框架,实现用户管理和权限控制,主要内容如下: 1.登录(带验证码),包括“记住我”的功能; 2.加密,存储的密码不采用明文,初始密码123; 3.session管理:使用shiro默认的...
首先,Spring Boot是Spring框架的一种简化版,它内置了Tomcat服务器,简化了配置,使得开发者可以更快地搭建和运行应用程序。Spring Boot的核心特性包括自动配置、起步依赖和命令行接口,这极大地提高了开发效率,...
Spring框架则提供了一种松耦合的组件管理方式,它不仅包含IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)特性,还能整合其他框架如Hibernate,增强了应用程序的可扩展性...