Acegi + Spring + Hibernate + Struts 2搭建基于角色的权限控制系统
来源:互联网 发布:淘宝假货如何投诉315 编辑:程序博客网 时间:2024/04/30 03:22
安全永远是WEB应用系统必须面对的头等大事, 也是最头疼的事, 其实安全系统就只包括两个问题: 认证和授权.
以前做些网站系统, 安全检测逻辑都在放在须要安全控制的代码前面, 这样做有很多不好的地方, 重复多次的编码就不用说了, 代码移植性, 重用性都得不到体现, 安全检测逻辑要永远和业务逻辑放在一起.
那么, 能不能够在进入方法前就调用一些安全检测? 其实Spring AOP就是这个思想, 那么又如何实现安全检测呢? Spring Acegi Security 框架就是做这个事情.
本文主要是讨论下在已有的SSH系统中, 如何使用Acegi作为安全框架实现基于角色的权限控制(Role Based Access Control RBAC) , 本文主要是以Java 5注解的形式来配置安全框架, 大大减化配置和操作.
本文的主要参考资料: <Spring 2.0 核心技术与最佳实践> 第10章 (Spring Acegi 安全框架)
<精通Spring 2.X -- 企业应用开发详解> 第17章 (使用Acegi 实施应用系统安全)
acegi-security-1.0.6 官方文档
说明: 本文介绍的是RBAC, 在官方文档的基础上有所扩展或改动, 以更适合WEB应用系统. 其实我觉得大多数的网站基于角色已经足够了, 一般都没必要基于权限.
文章开始:
一. 下载所要的软件或JAR包:
我的相关配置是: Java 5, Tomcat 5.5.26, Struts 2.0.11, Spring 2.5.1, Hibernate 3.2, Acegi 1.0.6
二. 建立相关的数据库:
数据表: 用户信息表User: id, enable, user_name, user_pass, email_box
角色信息表RoleInfo: id, role_name, role_title, descp
用户与角色关联表(用户与角色是多对多关系)UserRole: user_id, user_name, role_id, role_name
并在这三个表中插入相关的数据, 我是定义了两种角色(role_name): ROLE_USER, ROLE_ADMIN
和三个用户, 一个用户角色为: ROLE_USER, ROLE_ADMIN
另一个用户角色为: ROLE_USER
第三个没有角色.
二. 修改配置文件:
其实对Acegi框架的应用难点就在配置文件, 所以要特别注意了:
在 src 建立Acegi的配置文件: acegi-security.xml 当然这个文件的名称是可以任意的.
acegi-security.xml 说白了就是配置: 安全拦截器, 认证管理器, 决策管理器.
其内容如下:
在上面的配置文件中, 红色部分要特别注意, 其余的内容都差不多了.
在整个应用的安全控制中, 我们唯一要编写代码的类就是: org.ymcn.security.AcegiUserDeitailsService
就连登录和登出的代码也不要了.
三. 修改 web.xml, 增加安全控制过滤链.
注意: 这个过滤器一定要在MVC转发过滤器的前面!!!!
四. 在 applicationContext.xml 中增加 Acegi安全控制拦截器 和 Spring的自动代理功能实现AOP代理
五. 编写在利用Acegi框架唯一要我们编写的类 AcegiUserDeitailsService.java
六. 在业务逻辑代码中利用Java 5注释实现安全控制 @Secured({"ROLE_USER"}) @Secured({"ROLE_ADMIN"}) 其实就是在需要安全控制的方法前加上: @Secured({"角色名"}), 非常的简单 七. 整个工作完成 Acegi框架完全是一种可插拔式的, 完全可以在原有的系统中加个一个配置文件, 和在每个方法前加上: @Secured({"角色名"}) 就可完成. 上面的 AcegiUserDeitailsService.java 中的有 UserDao, UserRoleDao, 我想一看就知道它们是干什么的了, 这完全取决于个人的实现, 与Acegi无关, 它仅仅只要返回一个 return new org.acegisecurity.userdetails.User(userName, user.getUserPass(),
void sendSimpleMail(Long userId);
void sendAttachmentMail() throws Exception;
true, true, true, true, this.grantedAuthArray) 就可以了.
- Acegi + Spring + Hibernate + Struts 2搭建基于角色的权限控制系统
- Acegi + Spring + Hibernate + Struts 2搭建基于角色的权限控制系统
- Acegi + Spring + Hibernate + Struts 2搭建基于角色的权限控制系统
- Acegi + Spring + Hibernate + Struts 2搭建基于角色的权限控制系统
- Acegi + Spring + Hibernate + Struts 2搭建基于角色的权限控制系统
- [分享]Acegi + Spring + Hibernate + Struts 2搭建基于角色的权限控制系统
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- Acegi+hibernate 动态实现基于角色的权限管理
- 理解基于Acegi的权限控制系统(图)- -
- 一个基于角色的权限控制系统
- ASP.net MVC 基于角色的权限控制系统的实现
- 实现基于Spring框架应用的权限控制系统
- 实现基于Spring框架应用的权限控制系统
- 实现基于Spring框架应用的权限控制系统
- 执行iframe中的javascript方法
- 美客机水面迫降,乘客冷静撤离的感触
- 杨天行:信息技术标准化对信息化建设的作用
- 通过jmx监控jboss数据库连接池
- rpm安装软件包的依赖问题
- Acegi + Spring + Hibernate + Struts 2搭建基于角色的权限控制系统
- SET ROWCOUNT
- uclinux-2008R1.5-RC3(bf561)到VDSP5的移植(35):.init.data
- 典型的ALV-GRID report
- 近乎完美的分页存储过程
- 笔记:Grub4Dos 实现Xp多重启动 (Ghost版安装的Xp)
- 还是为这个寒假列个计划吧
- 学习汇编前你应该知道的知识
- 破解笔记1——SEH