Spring Security 概述

优质
小牛编辑
132浏览
2023-12-01

Spring Security 简介

Spring Security为基于 Java EE 的企业软件应用程序提供全面的安全服务。特别是使用 Spring Framework 构建的项目,可以更好的使用 Spring Security 来加快构建的速度。

Spring Security 的出现有有很多原因,但主要是基于 Java EE 的 Servlet 规范或 EJB 规范的缺乏对企业应用的安全性方面的支持。而使用 Spring Security 克服了这些问题,并带来了数十个其他有用的可自定义的安全功能。

注:在 Java 界,另外一个值得推荐的安全框架是 Apache Shiro。有关 Apache Shiro 的资料,可以看笔者的另外一本开源书《Apache Shiro 1.2.x 参考手册》

应用程序安全性的两个主要领域是

  • 身份认证(authentication):“认证”是建立主体 (principal)的过程。主体 通常是指可以在您的应用程序中执行操作的用户、设备或其他系统;
  • 授权(authorization):或称为“访问控制(access-control),“授权”是指决定是否允许主体在应用程序中执行操作。为了到达需要授权决定的点,认证过程已经建立了主体的身份。这些概念是常见的,并不是特定于 Spring Security。

在认证级别,Spring Security 支持各种各样的认证模型。这些认证模型中的大多数由第三方提供,或者由诸如因特网工程任务组的相关标准机构开发。此外,Spring Security 提供了自己的一组认证功能。具体来说,Spring Security 目前支持所有这些技术的身份验证集成:

  • HTTP BASIC 认证头(基于IETF RFC的标准)
  • HTTP Digest 认证头(基于IETF RFC的标准)
  • HTTP X.509 客户端证书交换(基于IETF RFC的标准)
  • LDAP(一种非常常见的跨平台身份验证需求,特别是在大型环境中)
  • 基于表单的身份验证(用于简单的用户界面需求)
  • OpenID 身份验证
  • 基于预先建立的请求头的验证(例如Computer Associates Siteminder)
  • Jasig Central Authentication Service,也称为CAS,这是一个流行的开源单点登录系统
  • 远程方法调用(RMI)和HttpInvoker(Spring远程协议)的透明认证上下文传播
  • 自动“remember-me”身份验证(所以您可以勾选一个框,以避免在预定时间段内重新验证)
  • 匿名身份验证(允许每个未经身份验证的调用,来自动承担特定的安全身份)
  • Run-as 身份验证(如果一个调用应使用不同的安全身份继续运行,这是有用的)
  • Java认证和授权服务(Java Authentication and Authorization Service,JAAS)
  • Java EE 容器认证(因此,如果需要,仍然可以使用容器管理身份验证)
  • Kerberos
  • Java Open Source Single Sign-On(JOSSO)*
  • OpenNMS Network Management Platform *
  • AppFuse *
  • AndroMDA *
  • Mule ESB *
  • Direct Web Request (DWR)*
  • Grails *
  • Tapestry *
  • JTrac *
  • Jasypt *
  • Roller *
  • Elastic Path *
  • Atlassian人群*
  • 自己创建的认证系统

(其中加*是指由第三方提供,Spring Security 来集成)

许多独立软件供应商(ISV)采用Spring Security,是出于这种灵活的认证模型。这样,他们可以快速地将他们的解决方案与他们的最终客户需要进行组合,从而避免了进行大量的工作或者要求变更。如果上述认证机制都不符合您的需求,Spring Security 作为一个开放平台,可以基于它很容易就实现自己的认证机制。

不考虑认证机制,Spring Security提供了一组深入的授权功能。有三个主要领域:

  • 对 Web 请求进行授权
  • 授权某个方法是否可以被调用
  • 授权访问单个领域对象实例

Spring Security 的安装

最小化依赖如下:

使用 Maven

使用 Maven 的最少依赖如下所示:

  1. <dependencies>
  2. ......
  3. <dependency>
  4. <groupId>org.springframework.security</groupId>
  5. <artifactId>spring-security-web</artifactId>
  6. <version>4.2.2.RELEASE</version>
  7. </dependency>
  8. <dependency>
  9. <groupId>org.springframework.security</groupId>
  10. <artifactId>spring-security-config</artifactId>
  11. <version>4.2.2.RELEASE</version>
  12. </dependency>
  13. ......
  14. </dependencies>

使用 Gradle

使用 Gradle 的最少依赖如下所示:

  1. dependencies {
  2. ......
  3. compile 'org.springframework.security:spring-security-web:4.2.2.RELEASE'
  4. compile 'org.springframework.security:spring-security-config:4.2.2.RELEASE'
  5. ......
  6. }

本书所有例子,将统一使用 Gradle 编写。各位读者如果需要了解 Gradle 方面的知识,可以参阅《Gradle 3 用户指南》

模块

自 Spring 3 开始,Spring Security 将代码划分到不同的 jar 中,这使得不同的功能模块和第三方依赖显得更加清晰。

Core - spring-security-core.jar

包含核心的 authentication 和 authorization 的类和接口、远程支持和基础配置API。任何使用 Spring Security 的应用都需要引入这个 jar。支持本地应用、远程客户端、方法级别的安全和 JDBC 用户配置。主要包含的顶级包为为:

  • org.springframework.security.core:核心
  • org.springframework.security.access:访问,即 authorization 的作用
  • org.springframework.security.authentication:认证
  • org.springframework.security.provisioning:配置

Remoting - spring-security-remoting.jar

提供与 Spring Remoting 整合的支持,你并不需要这个除非你需要使用 Spring Remoting 写一个远程客户端。主包为: org.springframework.security.remoting

Web - spring-security-web.jar

包含 filter 和相关 Web安全的基础代码。如果我们需要使用 Spring Security 进行 Web 安全认证和基于URL的访问控制。主包为: org.springframework.security.web

Config - spring-security-config.jar

包含安全命名空间解析代码和 Java 配置代码。 如果您使用 Spring Security XML 命名空间进行配置或 Spring Security 的 Java 配置支持,则需要它。 主包为: org.springframework.security.config。我们不应该在代码中直接使用这个jar中的类。

LDAP - spring-security-ldap.jar

LDAP 认证和配置代码。如果你需要进行 LDAP 认证或者管理 LDAP 用户实体。顶级包为: org.springframework.security.ldap

ACL - spring-security-acl.jar

特定领域对象的ACL(访问控制列表)实现。使用其可以对特定对象的实例进行一些安全配置。顶级包为: org.springframework.security.acls

CAS - spring-security-cas.jar

Spring Security CAS 客户端集成。如果你需要使用一个单点登录服务器进行 Spring Security Web 安全认证,需要引入。顶级包为: org.springframework.security.cas

OpenID - spring-security-openid.jar

OpenId Web 认证支持。基于一个外部 OpenId 服务器对用户进行验证。顶级包为: org.springframework.security.openid,需要使用 OpenID4Java.

一般情况下,spring-security-corespring-security-config都会引入,在 Web 开发中,我们通常还会引入spring-security-web

Test - spring-security-test.jar

用于测试 Spring Security。在开发环境中,我们通常需要添加该包。

源码

如果,你对 Spring Security 的源码该兴趣,你代码托管于https://github.com/spring-projects/spring-security

本教程所使用的代码,在项目的根目录samples下。

最后更新:

类似资料

  • 概述 国际化和本地化的目的就是让一个网站应用能做到根据用户语种和指定格式的不同而提供不同的内容。 Django 对文本翻译, 日期、时间和数字的格式化,以及时区提供了完善的支持。 实际上,Django做了两件事: 由开发者和模板作者指定应用的哪些部分应该翻译,或是根据本地语种和文化进行相应的格式化。 根据用户的偏好设置,使用钩子将web应用本地化。 很显然,翻译取决于用户所选语言,而格式化通常取决

  • 虽然Django 满满的便捷性让Web 开发人员活得轻松一些,但是如果不能轻松地部署你的网站,这些工具还是没有什么用处。Django 起初,易于部署就是一个主要的目标。有许多优秀的方法可以轻松地来部署Django: 如何使用WSGI 部署 部署的检查清单 FastCGI 的支持已经废弃并将在Django 1.9 中删除。 如何使用FastCGI、SCGI 和AJP 部署Django 如果你是部署D

  • 本书概述 进程的概念大家都很熟悉,但你是否能准确说出僵尸进程的含义呢?还有 COW(Copy On Write)、Flock(File Lock)、Epoll 和 Namespace 的概念又是否了解过呢? 本书汇集了进程方方面面的基础知识,加上编程实例,保证阅读后能自如地回答以上问题,在项目开发中对进程的优化也有更深的理解。 本书架构 本书按循序渐进的方式介绍进程的基础概念和拓展知识,主要涵盖以

  • Docker在1.12.0和以上版本中增加了swarm模式。通过swarm模式管理的Docker Engines集群称之为“Swarm”。并可以通过Docker CLI来创建Swarm,在Swarm中部署应用服务,以及管理Swarm。 功能特点 在Docker Engines中集成了集群管理功能:通过Docker CLI可以创建一个用来发布应用services的swarm,而不需要安装其他任何额外

  • 这是 Elasticsearch 官方的 PHP 客户端。我们把 Elasticsearch-PHP 设计成低级客户端(低级设计模式),使用时不会偏离 REST API 的用法。 客户端所有方法几乎都与 REST API 对应,而且也与其他编程语言的客户端(如 ruby, python 等)方法结构相似。我们希望这种对应方式可以方便开发者更加容易上手客户端,且以最小的代价快速从一种编程语言转换到另

  • 特点 为什么用 Groovy?