`
luoshan
  • 浏览: 3138 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

总结Spring Security之 关于Authentication 前言

 
阅读更多

前言
开始花了两三天的时间学Spring Security,还是云山雾罩的,大受打击。于是重新总结一下,飞越迷雾,梳理思路,写这样一篇文字。网上有个雷锋写了Spring Security2 学习精讲:http://www.javaeye.com/topic/319965里面包含可以运行的代码,如果你对spring scurity感兴趣,可以快速浏览一下下面的笔记,然后debug code,然后再看看笔记。Spring Security的内容远比笔记复杂,我只是根据自己的理解挑重要的记录并整理一下。把sample code也当作笔记的一部分,那个code还是比较精简地,更重要的是实用。
官方提供的sample code包居然没有源代码,faint, google半天找到http://grepcode.com/snapshot/repo1.maven.org/maven2/org.springframework.security/spring-security-samples-contacts/2.0.0 当然,如果你会用git的话也可以自己check out code, 不过我没用过git这种高级货。

正文
跟权限有关的两个概念是 认证 和 授权, 先上个图:

image

Run-As Manager 和 After-Invocation Manager不重要

The  actual  implementation  of  a  security  interceptor  will  depend  on  what resource is being secured. If you’re securing a URL in a web application, the security  interceptor  will  be  implemented  as  a  servlet  filter.  But  if  you’re  securing  a method invocation, aspects will be used to enforce security.

这篇只说Authentication Manager:

认证是通过AuthenticationManager来管的,

public interface AuthenticationManager {
  public Authentication authenticate(Authentication authentication)
      throws AuthenticationException;

}

The  authenticate()  method  will  attempt  to  authenticate  the  user  using  the org.acegisecurity.Authentication object (which carries the principal and credentials). If successful, the authenticate() method returns a complete Authentication  object,  including  information  about  the  user’s  granted  authorities (which will be considered by the authorization manager).

具体的工作是交给各个 authentication provider来做的:

image

这里provider manager包含多个具体的providers:

<bean id="authenticationManager" 
    class="org.acegisecurity.providers.ProviderManager">
  <property name="providers">
    <list>
      <ref bean="daoAuthenticationProvider"/>
      <ref bean="ldapAuthenticationProvider"/>
    </list>
  </property>
</bean>
ProviderManager is given its list of authentication providers through its providers property.

以DaoAuthenticationProvider举例:

<bean id="authenticationProvider" 
    class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
  <property name="userDetailsService"
      ref="userDetailsService"/>
</bean>

它会要求一个UserDetailsService, 跟它相关的是UserDetails接口

UserDetailsService接口是个简单的接口

public interface UserDetailsService {
    UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException;
}

 

UserDetails接口如下:

public interface UserDetails extends Serializable {
    GrantedAuthority[] getAuthorities();

    String getPassword();

    String getUsername();

    boolean isAccountNonExpired();

    boolean isAccountNonLocked();

    boolean isCredentialsNonExpired();

    boolean isEnabled();
}

解释一下getAuthorities:该方法返回一个GrantedAuthority[]数组对象,GrantedAuthority是用户权限信息对象,这个对象中定义了一个获取用户权限描述信息的getAuthority()方法。

需要注意Authentication对象才是Spring Security使用的进行安全访问控制用户信息安全对象。实际上,Authentication对象有未认证和已认证两种状态,在作为参数传入认证管理器(AuthenticationManager)的authenticate方法时,是一个未认证的对象,它从客户端获取用户的身份信息(如用户名,密码),可以是从一个登录页面,也可以从Cookie中获取,并由系统自动构造成一个Authentication对象。而这里提到的UserDetails代表一个用户安全信息的源(从数据库,LDAP服务器,CA中心返回),Spring Security要做的就是将这个未认证的Authentication对象和UserDetails进行匹配,成功后将UserDetails中的用户权限信息拷贝到Authentication中组成一个完整的Authentication对象,共其它组件共享。

 

原文链接:http://www.blogjava.net/vcycyv/archive/2011/03/08/345922.html

分享到:
评论

相关推荐

    SpringSecurity学习总结源代码

    总结,SpringSecurity是一个功能强大的安全框架,它为开发者提供了安全Web应用的全套解决方案。通过理解并熟练运用其核心概念和组件,我们可以构建出安全、健壮的应用程序。在学习过程中,分析提供的源代码和示例将...

    Spring Security in Action

    Spring Security 实践指南 Spring Security 是一个基于 Java 的安全框架,旨在提供身份验证、授权和访问控制等功能。下面是 Spring Security 的主要知识点: 一、身份验证(Authentication) 身份验证是指对用户...

    springsecurity角色和权限

    综上所述,Spring Security的角色和权限机制是其核心功能之一,它为企业级应用提供了灵活且强大的安全控制手段。通过合理的配置和实现,开发者可以构建出符合需求的安全系统,确保用户数据和操作的安全性。

    SpringSecurity笔记,编程不良人笔记

    SpringSecurity提供`Authentication`接口,用于处理身份验证过程。 - **Authorization**: 授权是指决定用户是否有权限访问某个资源。SpringSecurity支持基于角色的访问控制(RBAC)和其他授权模型。 - **Access ...

    springsecurity学习笔记

    Spring Security 是一个强大的Java安全框架,用于保护基于Spring的应用程序。它提供了全面的安全服务,包括认证、授权、CSRF防护、会话管理等。在深入理解Spring Security之前,我们需要了解几个核心概念: 1. **...

    spring-security 官方文档 中文版

    - **4.3 更多信息**:提供了更多关于 Spring Security 的资料和支持渠道。 #### 五、总结 Spring Security 作为一款成熟的安全框架,不仅提供了丰富的功能,而且具有良好的扩展性和易用性。通过上述介绍,我们了解...

    spring security 官方文档

    Spring Security 是一个强大的安全框架,用于为Java应用提供全面的安全管理解决方案。它是Spring生态系统的组成部分,专注于身份验证、授权和访问控制。Spring Security的核心特性包括: 1. **身份验证...

    Spring Security3 安全 个人总结

    Spring Security3 安全个人总结 Spring Security3 是一个基于 Java 的安全框架,提供了一个灵活的安全机制来保护基于 Spring 的应用程序。在这个总结中,我们将详细介绍 Spring Security3 的安全机制、原理和核心...

    精彩:Spring Security 演讲PPT

    在演讲结束后,演讲嘉宾张明星还预留了时间进行现场问答,解答了观众关于Spring Security的实际应用和技术细节等问题。 ### 总结 通过这次演讲,我们可以看出Spring Security 2.x不仅在功能上强大,而且在灵活性和...

    狂神Spring Security静态资源

    在这个名为"狂神Spring Security静态资源"的资料中,我们可以期待学习到关于如何保护Web应用中的静态资源不被未经授权的用户访问。 首先,了解Spring Security的基本概念是必要的。它主要由四个组件构成:...

    springsecurity原理流程图.pdf

    Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架,它是安全领域中Spring生态系统的一部分。Spring Security旨在为Java应用程序提供一个全面的安全解决方案,尤其适用于企业级应用场景。它主要...

    springSecurity 实现传参

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。在这个场景中,我们关注的是如何使用Spring Security实现登录验证以及在登录过程中传递参数,特别是记录并返回用户登录前的...

    SpringSecurity项目

    springsecurity是一个功能强大且高度可定制的身份验证和访问控制框架。springsecurity是一个...最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式。

    Spring Security 学习总结1_3

    认证流程通常包含以下步骤:用户提交凭证 -&gt; Spring Security验证 -&gt; 创建Authentication对象并存储在SecurityContext中。 **权限授权** 权限授权是通过Access Decision Manager和AccessDecisionVoter来实现的。...

    Spring security认证授权

    首先,Spring Security的核心概念包括认证(Authentication)和授权(Authorization)。认证是确认用户身份的过程,而授权则是确定认证后的用户是否有权访问特定资源。 1. **认证过程**: - **配置**:在Spring ...

    spring security3.0所需要的最精简的jar包

    Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理。它提供了认证、授权和访问控制功能,使得开发者可以轻松地在应用程序中实现复杂的安全需求。在3.0版本中,Spring Security 已经相当成熟,提供...

    Spring Security 3.pdf

    1. **UserDetailsService**: 这是Spring Security的核心组件之一,负责加载用户信息。开发者可以通过实现这个接口,从数据库或其他来源获取用户信息。 2. **RoleHierarchy**: 定义角色之间的层次关系,允许将角色...

    Spring Security如何使用URL地址进行权限控制

    import org.springframework.security.authentication.InsufficientAuthenticationException; import org.springframework.security.core.Authentication; import java.util.Collection; public class ...

    SpringSecurity素材.rar

    1. **SpringSecurity简介**:首先会介绍SpringSecurity的基本概念和架构,包括它如何通过层层过滤器保护Web应用,以及它提供的主要组件如Authentication(认证)和Authorization(授权)。 2. **配置SpringSecurity...

Global site tag (gtag.js) - Google Analytics