Spring Security

Spring Security是Spring 家族的一员,它通过提供完整可扩展的认证和授权支持来保护程序。

它还充分利用了Spring IoC(控制反转)、DI(依赖注入)和AOP(面向切面编程)的功能,提供了大量在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全访问控制功能,减少了为系统安全权限控制而编写大量重复代码的工作。

它是一个重量级的安全框架,搭配了流行的安全算法实现。安全控制主要包括“认证”与“授权”两个操作。

“认证”是验证确认身份以授予对系统的访问权限,是验证用户凭据以获得用户访问权限的过程。它决定用户是否是他声称的用户。

“授权”是确定你是否有权访问资源,是验证是否允许访问的过程。它确定用户可以访问和不访问的内容。

详细可参考Spring Security

二、Shiro

Shiro是Apache 旗下的轻量级权限控制框架。它主张的理念是把复杂的事情变简单,针对有更高要求性能的互联网应用有着更好的表现。

Shiro有着很好的通用性,不局限于Web 环境,但在Web 环境下一些特定的需求需要手动编写代码定制,有一定的代码侵入。

Shiro有着易于理解的 Java Security API、简单的身份认证,支持多种数据源,能对角色的简单的签权,支持细粒度的签权,内置会话管理,简单的加密 API,不跟任何的框架捆绑,可以独立运行。

Shiro的三个核心组件:Subject,SecurityManager 和 Realms.

Subject:主体,与当前应用交互的任何东西。

所有Subject都会绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager。Subject相当于门户,SecurityManager是执行者;

SecurityManager:安全管理器。所有与安全有关的操作都会与SecurityManager交互,管理着所有Subject。它是Shiro的核心,负责与其它组件进行交互。

Realm:域。Realm类似于安全数据源。Shiro将会从Realm获取安全数据(如用户、角色、权限)。

如果SecurityManager需要验证用户身份,那么它需要从Realm获取相应的用户信息进行比较以确定用户身份是否合法,也需要从Realm得到用户相对应的角色或者权限进行验证用户是否能进行操作。