acegi

    Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。
    安全涉及到两个不同的概念,认证和授权。前者是关于确认用户是否确实是他们所宣称的身份。授权则是关于确认用户是否有允许执行一个特定的操作。
    在Acegi安全系统中,需要被认证的用户,系统或代理称为"Principal"。

    Acegi中最基础的是SecurityContextHolder,它用于存储应用系统的security context的所有细节信息(details),其中包括使用应用系统的principal的信息(details)。SecurityContextHolder默认是TheadLocal(SecurityContextHolder.MODE_THREADLOCAL)的,如果需要处理多线程的控制,可以设置一个系统变量,或者调用SecurityContextHolder的一个静态方法进行修改,如修改SecurityContextHolder.MODE_GLOBAL等。

    SecurtiyContextHolder中存储principal信息是使用Authentication对象进行的,在SecurityContextHolder和Authentication中间还存在一个叫SecurityContext的对象,它可以用于处理需要存储不是特定principal相关的信息而是更为通用的信息时使用的,所以SecurityContextHolder.getContext()可以获取SecurityContext对象,SecurityContextHolder.getContext().getAuthentication()可以获取Authentication对象,
SecurityContextHolder.getContext().getAuthentication().getPrincipal()可以获取Principal对象,Principal对象多数情况下被转换为UserDetails对象,UserDetails是Acegi的一个核心接口,它的作用相当于作为一个适配器转换我们数据库中的信息和需要存储于SecurityContextHolder中的信息。Acegi中使用一个叫UserDetailsService的接口接受username参数并返回相应的UserDetails对象,Acegi还提供了UserDetailsService接口的实现类,诸如In Memory的访问和JDBC访问。

    GrantedAuthority是授予相应Principal的应用系统权限。

    为了处理Http请求间认证Acegi使用HttpSessionIntegrationFilter,HttpSessionIntegrationFilter用于在HttpSession存储Http请求间的SecurityContext。

    ExceptionTranslationFilter用于处理认证过程中出现的exception。

    AuthenticationProvider用于获取Authentication请求对象,并决定该对象是否有效。AuthenticationProvider请求UserDetailsService接口提供UserDetails对象,用于合成UserDetails信息和GrantedAuthority[]s信息于UserDetails对象中,并构造完整的Authentication对象。

    Acegi不理会你是怎样将Authentication对象放进SecurityContextHolder中,只要在AbstractSecurityIntercepter验证请求之前,Authentication对象已经在SecurityContextHolder中像一个Principal一样存在就行了。所以最常用的和旧系统的验证系统结合的方式就是,你自己写一个filter读取第三方(旧系统)的user信息并构造一个Authentication放入SecurityContextHolder中。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值