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

Spring框架下实现基于组的用户权限管理

阅读更多

在几乎所有的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。

分享到:
评论

相关推荐

    现基于Spring框架应用的权限控制系统

    本文将详细讨论如何在基于Spring框架的应用中实现权限控制系统,重点介绍Acegi安全框架的使用及其在权限管控方面的解决方案。 首先,我们要了解Spring框架的核心特点。Spring框架通过控制反转(IoC)和面向切面编程...

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

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

    基于Spring Cloud Alibaba + React的微服务权限管理系统.zip

    一款基于Spring Cloud Alibaba的权限管理系统,集成市面上流行库,可以作用为快速开发的一个框架使用 一套以微服务架构的脚手架,使用Spring Boot Alibaba系列进行架构,学习并了解它将能快速掌握微服务核心基础。 此...

    基于Spring Boot框架的权限管理系统.zip

    基于Spring Boot框架的权限管理系统 项目简介 本项目是一个基于Spring Boot框架的权限管理系统,旨在提供一个高效、灵活的用户权限管理解决方案。系统涵盖了用户管理、角色管理、菜单管理等多个模块,支持用户...

    基于 spring,spring mvc,mybatis 权限管理系统

    【描述】:该系统设计的核心目标是实现用户角色的管理和权限分配,使得不同用户或用户组能访问不同的系统资源。通过Spring框架,我们可以实现依赖注入,简化代码维护和测试;Spring MVC则负责处理HTTP请求,提供视图...

    (源码)基于Spring Security框架的RBAC权限管理系统.zip

    # 基于Spring Security框架的RBAC权限管理系统 ## 项目简介 本项目是一个基于Spring Security框架的RBAC(RoleBased Access Control)权限管理系统。通过整合Spring Security,实现了对用户权限的精细化控制。系统...

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

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

    ssm(spring+springMVC+mybatis)权限管理系统完整源码

    SSM(Spring+SpringMVC+Mybatis)权限管理系统是一个基于Java Web技术的全面权限管理解决方案,它结合了Spring框架的 IoC(Inversion of Control)容器、SpringMVC作为 MVC(Model-View-Controller)架构的实现以及...

    Spring Boot+Maven+Spring Data JPA+apache Shiro+Easyui实现通用用户权限管理系统

    - **用户管理**:创建、修改、删除用户,管理用户的角色和权限。 - **角色管理**:定义角色,分配权限,一个角色可以拥有多个权限。 - **权限管理**:定义权限,包括访问资源的权限和操作资源的权限。 - **登录认证*...

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

    后端使用SpringBoot框架进行业务逻辑开发,利用Spring Security实现权限控制。数据库采用MySQL进行数据存储,使用MyBatis进行数据访问。 权限控制模块设计包括用户、角色和权限三个主要模块。用户模块用于管理用户...

    基于Spring Cloud框架的权限管理系统.zip

    基于Spring Cloud框架的权限管理系统 内容概要 本项目是一个基于Spring Cloud框架的权限管理系统,旨在提供一个高效、灵活且易于扩展的微服务架构解决方案。系统支持前后端分离,后端开发专注于服务实现,前端开发...

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

    # 基于Spring Boot和Vue的后台权限管理系统 ## 项目简介 本项目是一个基于Spring Boot和Vue的后台权限管理系统,旨在提供一个高效、安全且易于扩展的后台管理系统。系统集成了Spring Security、JWT、Redis和MySQL...

    基于SSM框架的用户权限管理

    综上所述,本项目通过SSM框架和RBAC模型,构建了一个用户权限管理系统,不仅能够实现基础的用户管理和权限分配,还能通过Spring Security进行精细的权限拦截,确保系统安全。这种设计模式在现代企业级应用中非常常见...

    基于Spring Boot框架的用户管理系统.zip

    基于Spring Boot框架的用户管理系统 项目简介 本项目是一个基于Spring Boot框架的用户管理系统,旨在提供一个高效、易扩展的用户管理解决方案。系统集成了Spring Data JPA、Redis、Swagger等技术,支持复杂SQL...

    基于 Spring Cloud 2021 、Spring Boot 2.7、 OAuth2 的 RBAC 权限管理系统源码

    该项目旨在提供一套高效、安全的后端服务框架,用于实现用户权限的精细化管理。 首先,Spring Boot 2.7是Spring框架的一个轻量级版本,它简化了Java应用的开发过程,通过内嵌的Tomcat服务器和自动配置功能,使得...

    基于Spring Boot和Shiro框架的权限管理系统.zip

    基于Spring Boot和Shiro框架的权限管理系统 内容概要 本项目是一个基于Spring Boot和Shiro框架的权限管理系统,实现了前后端分离的权限控制,支持按钮和接口级别的细粒度权限管理。系统采用RBAC(基于角色的访问...

    基于Spring,整合Apache Shiro框架,实现RBAC权限控制和用户管理【含源码+数据库】

    本项目基于Spring,整合Apache Shiro框架,实现用户管理和权限控制,主要内容如下: 1.登录(带验证码),包括“记住我”的功能; 2.加密,存储的密码不采用明文,初始密码123; 3.session管理:使用shiro默认的...

    Struts_Spring_Hibernate实现的基于RBAC的权限管理系统Java源码

    Spring框架则提供了一种松耦合的组件管理方式,它不仅包含IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)特性,还能整合其他框架如Hibernate,增强了应用程序的可扩展性...

    权限管理系统,基于 shiro,spring mvc,mybatis 框架开发

    总结来说,这个基于Shiro、Spring MVC和MyBatis的权限管理系统实现了从用户认证到资源访问控制的全过程,为企业级应用提供了安全的访问控制机制。通过学习和实践这个项目,开发者可以深入理解Java Web安全框架的应用...

Global site tag (gtag.js) - Google Analytics