Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx

上传人:b****4 文档编号:5325432 上传时间:2023-05-08 格式:DOCX 页数:13 大小:18.77KB
下载 相关 举报
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx_第1页
第1页 / 共13页
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx_第2页
第2页 / 共13页
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx_第3页
第3页 / 共13页
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx_第4页
第4页 / 共13页
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx_第5页
第5页 / 共13页
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx_第6页
第6页 / 共13页
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx_第7页
第7页 / 共13页
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx_第8页
第8页 / 共13页
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx_第9页
第9页 / 共13页
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx_第10页
第10页 / 共13页
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx_第11页
第11页 / 共13页
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx_第12页
第12页 / 共13页
Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx

《Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx》由会员分享,可在线阅读,更多相关《Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx(13页珍藏版)》请在冰点文库上搜索。

Acegi Spring Hibernate Struts2搭建基于角色的权限控制系统.docx

AcegiSpringHibernateStruts2搭建基于角色的权限控制系统

AcegiSpringHibernateStruts2搭建基于角色的权限控制系统

安全永远是WEB应用系统必须面对的头等大事,也是最头疼的事,其实安全系统就只包括两个问题:

认证和授权.

   以前做些网站系统,安全检测逻辑都在放在须要安全控制的代码前面,这样做有很多不好的地方,重复多次的编码就不用说了,代码移植性,重用性都得不到体现,安全检测逻辑要永远和业务逻辑放在一起.

   那么,能不能够在进入方法前就调用一些安全检测?

其实SpringAOP就是这个思想,那么又如何实现安全检测呢?

SpringAcegiSecurity框架就是做这个事情.

    本文主要是讨论下在已有的SSH系统中,如何使用Acegi作为安全框架实现基于角色的权限控制(RoleBasedAccessControlRBAC),本文主要是以Java5注解的形式来配置安全框架,大大减化配置和操作.

   本文的主要参考资料:

第10章(SpringAcegi安全框架)

               <精通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,增加安全控制过滤链.

       acegiFilterChain

       org.acegisecurity.util.FilterToBeanProxy

       

           targetClass

           org.acegisecurity.util.FilterChainProxy

       

   

       acegiFilterChain

       *.j

   注意:

这个过滤器一定要在MVC转发过滤器的前面!

!

!

!

四.在applicationContext.xml中增加Acegi安全控制拦截器和Spring的自动代理功能实现AOP代理

--Acegi安全控制拦截器-->

  

   

    

   

  

--利用Spring的自动代理功能实现AOP代理-->

  

   transactionInterceptor

   serviceSecurityInterceptor

  

  

   userService

   mailService

  

五.编写在利用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;

}

/*用户所有的权限*/

//privatefinalListgrantedAuthList=newArrayList(6);

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.");

  }

  /*取得所有用户权限*/

  ListuserRoleList=u

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2