快速业务通道

Acegi + Spring + Hibernate + Struts 2搭建基于角色的权限控制 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
mport org.ymcn.model.UserRole; public class AcegiUserDeitailsService implements UserDetailsService { private final Log LOG = LogFactory.getLog(AcegiUserDeitailsService.class); /* 依赖注入 */ private UserDao userDao; private UserRoleDao userRoleDao; public void setUserDao(UserDao userDao) {    this.userDao = userDao; } public void setUserRoleDao(UserRoleDao userRoleDao) {    this.userRoleDao = userRoleDao; } /* 用户所有的权限 */ //private final List<GrantedAuthority> grantedAuthList = new ArrayList<GrantedAuthority>(6); private GrantedAuthority[] grantedAuthArray; public UserDetails loadUserByUsername(String userName)     throws UsernameNotFoundException, DataAccessException {    if(LOG.isDebugEnabled()) {     LOG.debug("Loading UserDetails of userName: " + userName);    }    /* 取得用户 */    User user = userDao.getUserByName(userName);    if(user == null) {     LOG.warn("UserDetails load failed: No such UserRole with userName: " + userName);             throw new UsernameNotFoundException("User name is not found.");    }    /* 取得所有用户权限 */    List<UserRole> userRoleList = userRoleDao.getUserRoleByUserName(userName);    if(userRoleList == null || userRoleList.size() == 0) {     LOG.warn("UserRole load failed: No such UserRole with userName: " + userName);             throw new UsernameNotFoundException("UserRole is not found.");    }    /* 取得用户的所有角色 */    int size = userRoleList.size();    grantedAuthArray = new GrantedAuthority[size];    int j = 0;    for(int i = 0; i < size; i++) {     UserRole userRole = userRoleList.get(i);     if(userRole != null) {      this.grantedAuthArray[j++] = new GrantedAuthorityImpl(userRole.getRoleName().toUpperCase());     }    }    LOG.info("UserName: " + userName + " loaded successfully.");         return new org.acegisecurity.userdetails.User(userName, user.getUserPass(),            true, true, true, true, this.grantedAuthArray); } }

六. 在业务逻辑代码中利用Java 5注释实现安全控制

@Secured({"ROLE_USER"}) void sendSimpleMail(Long userId); @Secured({"ROLE_ADMIN"}) void sendAttachmentMail() throws Exception;

其实就是在需要安全控制的方法前加上: @Secured({"角色名"}), 非常的简单

七. 整个工作完成

Acegi框架完全是一种可插拔式的, 完全可以在原有的系统中加个一个配置文件, 和在每个方法前加上: @Secured({"角色名"}) 就可完成.

上面的 AcegiUserDeitailsService.java 中的有 UserDao, UserRoleDao, 我想一看就知道它们是干什么的了, 这完全取决于个人的实现, 与Acegi无关, 它仅仅只要返回一个 return new org.acegisecurity.userdetails.User(userName, user.getUserPass(),

true, true, true, true, this.grantedAuthArray) 就可以了.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号