Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx
- 文档编号:10655907
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:13
- 大小:18.77KB
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx
《Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx》由会员分享,可在线阅读,更多相关《Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx(13页珍藏版)》请在冰豆网上搜索。
AcegiSpringHibernateStruts2搭建基于角色的权限控制系统
AcegiSpringHibernateStruts2搭建基于角色的权限控制系统
安全永远是WEB应用系统必须面对的头等大事,也是最头疼的事,其实安全系统就只包括两个问题:
认证和授权.
以前做些网站系统,安全检测逻辑都在放在须要安全控制的代码前面,这样做有很多不好的地方,重复多次的编码就不用说了,代码移植性,重用性都得不到体现,安全检测逻辑要永远和业务逻辑放在一起.
那么,能不能够在进入方法前就调用一些安全检测?
其实SpringAOP就是这个思想,那么又如何实现安全检测呢?
SpringAcegiSecurity框架就是做这个事情.
本文主要是讨论下在已有的SSH系统中,如何使用Acegi作为安全框架实现基于角色的权限控制(RoleBasedAccessControlRBAC),本文主要是以Java5注解的形式来配置安全框架,大大减化配置和操作.
本文的主要参考资料:
<精通Spring2.X--企业应用开发详解>第17章(使用Acegi实施应用系统安全)
acegi-security-1.0.6官方文档
说明:
本文介绍的是RBAC,在官方文档的基础上有所扩展或改动,以更适合WEB应用系统.其实我觉得大多数的网站基于角色已经足够了,一般都没必要基于权限.
文章开始:
一.下载所要的软件或JAR包:
我的相关配置是:
Java5,
Tomcat5.5.26,
Struts2.0.11,
Spring2.5.1,
Hibernate3.2,
Acegi1.0.6
二.建立相关的数据库:
s
数据表:
用户信息表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说白了就是配置:
安全拦截器,认证管理器,决策管理器.
其内容如下:
xmlversion="1.0"encoding="UTF-8"?
>
//www.springframework.org/schema/beans"xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation="http: //www.springframework.org/schema/beanshttp: //www.springframework.org/schema/beans/spring-beans.xsd"> --=========================认证管理器=========================--> --基于DAO验证的AuthenticationProvider--> --=========================决策管理器=========================--> --是否全部弃权就通过--> --=========================过滤器链=========================--> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,rememberMeFilter,exceptionFilter,securityInterceptor --登录退出后的URL--> --登录退出的URL--> --登录失败后的URL--> msg=%E6%97%A0%E6%95%88%E7%9A%84%E7%94%A8%E6%88%B7%E5%90%8D%E6%88%96%E5%8F%A3%E4%BB%A4"/> --登录成功后的URL--> --登录的URL--> --出现AuthenticationException时的登录入口--> --出现AccessDeniedException时的Handler--> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /admin/**=ROLE_ADMIN /user/**=ROLE_USER /cart/previeworder*=ROLE_USER 在上面的配置文件中,红色部分要特别注意,其余的内容都差不多了. 在整个应用的安全控制中,我们唯一要编写代码的类就是: org.ymcn.security.AcegiUserDeitailsService 就连登录和登出的代码也不要了. 三.修改web.xml,增加安全控制过滤链. 注意: 这个过滤器一定要在MVC转发过滤器的前面! ! ! ! 四.在applicationContext.xml中增加Acegi安全控制拦截器和Spring的自动代理功能实现AOP代理 --Acegi安全控制拦截器--> --利用Spring的自动代理功能实现AOP代理--> 五.编写在利用Acegi框架唯一要我们编写的类AcegiUserDeitailsService.java packageorg.ymcn.security; importjava.util.List; importorg.acegisecurity.GrantedAuthority; importorg.acegisecurity.GrantedAuthorityImpl; importorg.acegisecurity.userdetails.UserDetails; importorg.acegisecurity.userdetails.UserDetailsService; importorg.acegisecurity.userdetails.UsernameNotFoundException; importmons.logging.Log; importmons.logging.LogFactory; importorg.springframework.dao.DataAccessException; importorg.ymcn.dao.UserDao; importorg.ymcn.dao.UserRoleDao; importorg.ymcn.model.User; importorg.ymcn.model.UserRole; publicclassAcegiUserDeitailsServiceimplementsUserDetailsService{ privatefinalLogLOG=LogFactory.getLog(AcegiUserDeitailsService.class); /*依赖注入*/ privateUserDaouserDao; privateUserRoleDaouserRoleDao; publicvoidsetUserDao(UserDaouserDao){ this.userDao=userDao; } publicvoidsetUserRoleDao(UserRoleDaouserRoleDao){ this.userRoleDao=userRoleDao; } /*用户所有的权限*/ //privatefinalList privateGrantedAuthority[]grantedAuthArray; publicUserDetailsloadUserByUsername(StringuserName) throwsUsernameNotFoundException,DataAccessException{ if(LOG.isDebugEnabled()){ LOG.debug("LoadingUserDetailsofuserName: "+userName); } /*取得用户*/ Useruser=userDao.getUserByName(userName); if(user==null){ LOG.warn("UserDetailsloadfailed: NosuchUserRolewithuserName: "+userName); thrownewUsernameNotFoundException("Usernameisnotfound."); } /*取得所有用户权限*/ List
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统 Struts2 搭建 基于 角色 权限 控制系统