摘要:上一篇介绍了关于RBAC的内容,那么接下来咱们来看下在实际项目如何应用它。 我们主要介绍Spring Security安全管理框架,它提供了一整套基于RBAC的完整实现。具体演示项目可通过以下传送门获取(https://github.com/LikeSimple/Spring-security-demo)。因为目
上一篇介绍了关于RBAC的内容,那么接下来咱们来看下在实际项目如何应用它。 我们主要介绍Spring Security安全管理框架,它提供了一整套基于RBAC的完整实现。具体演示项目可通过以下传送门获取(https://github.com/LikeSimple/Spring-security-demo)。因为目前各类使用介绍的资料非常丰富,结合官方文档和演示项目即可学习使用。因此本文不再做基础的使用介绍,主要就其中的核心接口及重要概念做重点讲解。 UserDetails核心接口 该接口是提供用户信息的核心接口。该接口实现仅仅存储用户的信息。默认提供了: · 用户的权限集, 默认需要添加前缀 · 用户的加密后的密码, 不加密会使用前缀 · 应用内唯一的用户名 · 账户是否过期 · 账户是否锁定 · 凭证是否过期 · 用户是否可用 如果以上的信息满足不了你使用,你可以自行实现扩展以存储更多的用户信息。比如用户的邮箱、手机号等等。通常我们使用其实现类。该类内置一个建造器会很方便地帮助我们构建对象。 UserDetailsService接口 该接口只提供了一个方法: UserDetails loadUserByUsername(String username) 该方法很容易理解:通过用户名来搜索用户。 AuthenticationProvider 接口 该接口判断授权有效性,用户有效性,在判断用户是否有效性,它依赖于UserDetailsService实例,开发人员可以自定义UserDetailsService的实现。 AbstractUserDetailsAuthenticationProvider 是该接口的抽象实现类,继承实现该类以下方法可以定制对应逻辑 · additionalAuthenticationChecks 方法校验密码有效性 · retrieveUser 方法根据用户名获取用户 · createSuccessAuthentication 完成授权持久化 AuthenticationManager 用于抽象建模认证管理器,用于处理一个认证请求,也就是Spring Security中的Authentication认证令牌。 Authentication authenticate(Authentication authentication) throws AuthenticationException; 该方法接收一个认证令牌对象,也就是认证请求作为参数,如果其中的信息匹配到目标账号,则该方法返回同一个认证令牌对象,不过其中被认证过程填充了更多的账号信息,比如授权和用户详情等。 AuthenticationManager在认证过程中必须按以下顺序处理以下认证异常AuthenticationException : · DisabledException – 账号被禁用时抛出 · LockedException – 账号被锁定时抛出 · BadCredentialsException – 密码错误时抛出 Spring Seucrity 提供的缺省实现ProviderManager。ProviderManager管理了多个身份管理源,或者叫做认证提供者AuthenticationProvider,用于认证用户。它自身不实现身份验证,而是逐一使用认证提供者进行认证,直到某一个认证提供者能够成功地验证该用户的身份(或者是已经尝试完了该集合中所有的认证提供者仍然不能认证该用户的身份)。通过ProviderManager,Spring Security能够为单个应用程序提供多种认证机制。 Authentication接口 和 SecurityContex接口 org.springframework.security.core.Authentication 接口用来表示此认证对象。通过认证对象的方法可以判断当前用户是否已经通过认证,以及获取当前认证用户的相关信息,包括用户名、密码和权限等。 通过 org.springframework.security.core.context.SecurityContextHoldergetContext() 的静态方法 就可以获取。再通过 SecurityContext.getAuthentication()就可以得到Authentication。通过认证对象的 Authentication.getPrincipal() 方法就可以获得当前的认证主体。 认证主体通常是 UserDetails 接口的实现. 默认情况下(Web应用来说),SecurityContextHolder使用 ThreadLocal来保存 SecurityContext对象。因此,SecurityContext对象对于当前线程上所有方法都是可见的。这种实现对于 Web 应用来说是合适的。 责任链模式(Chain of Responsibility Pattern)和FilterChain 责任链:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。 FilterChain是Spring Security安全框架中最重要的组件,在我们进行用户认证以及授予权限的时候,通过各种各样的拦截器来控制权限的访问,是基于责任链模式的具体实现。 · 对于基于HttpRequest的方式对端点进行保护,我们使用一个Filter Chain来保护 · 对于基于方法调用进行保护,我们使用AOP来保护。 |
- 上一篇:广西柳城:寨隆派出所组织召开辖区机修业安全管理工作会议
- 下一篇:没有了
谈谈您对该文章的看