快速业务通道

SpringSide 3中的安全框架 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
问题,所以,它设计了一个<http> 标签,让Acegi的配置得到了简化。下面是SpringSide 3中的配置的截图,大家可以看看:

SpringSide 3中的安全框架 - 编程入门网

SpringSide 3中的安全框架(3)

时间:2011-09-14 海边沫沫

下图是官方文章中的传统Filter设置和<http>元素之间的对应关系:

SpringSide 3中的安全框架 - 编程入门网

下面的代码是SpringSide 3中实现UserDetailService的范例,在SpringSide 3的范例中,白衣使用了 三个表User、Role、Authority。但是Acegi不关心你用了几个表,它只关心UserDetails对象。而决定用 户能否访问指定Web资源的,是RoleVoter类,无需任何修改它可以工作得很好,唯一的缺点是它只认 ROLE_前缀,所以搞得白衣的Authority看起来都象角色,不伦不类。

package personal.youxia.service.security;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.dao.DataAccessException;
import org.springframework.security.GrantedAuthority;
import org.springframework.security.GrantedAuthorityImpl;
import org.springframework.security.userdetails.UserDetails;
import org.springframework.security.userdetails.UserDetailsService;
import org.springframework.security.userdetails.UsernameNotFoundException;
import personal.youxia.entity.user.Authority;
import personal.youxia.entity.user.Role;
import personal.youxia.entity.user.User;
import personal.youxia.service.user.UserManager;
/**
*实现SpringSecurity的UserDetailsService接口,获取用户Detail信息.
*
* @author calvin
 */
public  class UserDetailServiceImpl implements UserDetailsService{
   private UserManageruserManager;
   public UserDetailsloadUserByUsername(StringuserName) throws 

UsernameNotFoundException,DataAccessException{
    Useruser = userManager.getUserByLoginName(userName);
     if (user ==  null )
       throw  new UsernameNotFoundException(userName +  " 不存在 " );
    List < GrantedAuthority > authsList =  new ArrayList < GrantedAuthority 

> ();
     for (Rolerole:user.getRoles()){
       for (Authorityauthority:role.getAuths()){
        authsList.add( new GrantedAuthorityImpl(authority.getName()));
      }
    }
     // 目前在MultiDatabaseExample的User类中没有

enabled,accountNonExpired,credentialsNonExpired,accountNonLocked等属性
     // 暂时全部设为true,在需要时才添加这些属性.
    org.springframework.security.userdetails.Useruserdetail =  new 

org.springframework.security.userdetails.User(
        user.getLoginName(),user.getPassword(), true , true , true , true 

,authsList
            .toArray( new GrantedAuthority[authsList.size()]));
     return userdetail;
  }
  @Required
   public  void setUserManager(UserManageruserManager){
     this .userManager = userManager;
  }
}

最后再来说说这个命名的问题,我对Authentication和Authority这两个单词比较反感,两个原因,一 是因为它们太生僻了,二是因为它们长得太像了,明明一个是认证,一个是授权,意思相差很远,外貌却 如此相似,确实很烦人。如果让我来选择,我喜欢Privilege这个单词,在我刚使用MySQL的时候就跟它很 熟了,所

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号