Spring Security原理学习--核心过滤器Filter(二)
Spring Security原理学习--用户名和密码认证(三)
一、简介
中文介绍:https://springcloud.cc/spring-security-zhcn.html
Spring Security 提供了基于javaEE的企业应有个你软件全面的安全服务。这里特别强调支持使用SPring框架构件的项目,Spring框架是企业软件开发javaEE方案的领导者。如果你还没有使用Spring来开发企业应用程序,我们热忱的鼓励你仔细的看一看。熟悉Spring特别是一来注入原理两帮助你更快更方便的使用Spring Security。
人们使用Spring Secruity的原因有很多,单大部分都发现了javaEE的Servlet规范或EJB规范中的安全功能缺乏典型企业应用场景所需的深度。提到这些规范,重要的是要认识到他们在WAR或EAR级别无法移植。因此如果你更换服务器环境,这里有典型的大量工作去重新配置你的应用程序员安全到新的目标环境。使用Spring Security 解决了这些问题,也为你提供许多其他有用的,可定制的安全功能。
正如你可能知道的两个应用程序的两个主要区域是“认证”和“授权”(或者访问控制)。这两个主要区域是Spring Security 的两个目标。“认证”,是建立一个他声明的主题的过程(一个“主体”一般是指用户,设备或一些可以在你的应用程序中执行动作的其他系统)。“授权”指确定一个主体是否允许在你的应用程序执行一个动作的过程。为了抵达需要授权的店,主体的身份已经有认证过程建立。这个概念是通用的而不只在Spring Security中。
在身份验证层,Spring Security 的支持多种认证模式。这些验证绝大多数都是要么由第三方提供,或由相关的标准组织,如互联网工程任务组开发。另外Spring Security 提供自己的一组认证功能。具体而言,Spring Security 目前支持所有这些技术集成的身份验证:
-
HTTP BASIC 认证头 (基于 IETF RFC-based 标准)
-
HTTP Digest 认证头 ( IETF RFC-based 标准)
-
HTTP X.509 客户端证书交换 ( IETF RFC-based 标准)
-
LDAP (一个非常常见的方法来跨平台认证需要, 尤其是在大型环境)
-
Form-based authentication (用于简单的用户界面)
-
OpenID 认证
-
Authentication based on pre-established request headers (such as Computer Associates Siteminder) 根据预先建立的请求有进行验证
-
JA-SIG Central Authentication Service (CAS,一个开源的SSO系统 )
-
Transparent authentication context propagation for Remote Method Invocation (RMI) and HttpInvoker (Spring远程协议)
-
Automatic "remember-me" authentication (你可以勾选一个框以避免预定的时间段再认证)
-
Anonymous authentication (让每一个未经验证的访问自动假设为一个特定的安全标识)
-
Run-as authentication (在一个访问应该使用不同的安全标识时非常有用)
-
Java Authentication and Authorization Service (JAAS)
-
JEE container autentication (所以如果愿你以可以任然使用容器管理的认证)
-
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 Crowd *
-
Your own authentication systems (see below)
-
表示由第三方提供
很多独立软件供应商,因为灵活的身份验证模式二选择Spring Security。这样做允许他们快速的集成到他们的终端客户需求的解决方案而不用进行大量工程或者改变客户的环境。如果上面的验证机制不符合你的需求,Spring Security 是一个开放的平台,要实现你 自己的验证机制检查。Spring Security 的许多企业用户需要与不遵循任何安全标准的“遗留”系统集成,Spring Security可以很好的与这类系统集成。
无论何种身份验证机制,Spring Security提供一套的授权功能。这里有三个主要的热点区域,授权web请求、授权方法是否可以被调用和授权访问单个域对象的实例。为了帮助让你分别了解这些差异,认识在Servlet规范网络模式安全的授权功能,EJB容器管理的安全性和文件系统的安全。Spring Security在这些重要的区域提供授权功能,我们将在手册后面进行介绍。
二、示例
1、pom.xml引用spring security相关jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2、Spring security 相关初始化后设置
使用默认登录地址:/login
登录成功跳转地址:/hello
登出地址:/logout
除了登录地址为其他都需要校验:anyRequest().authenticated()
不拦截路径中包含/test的请求:antMatchers("/test").permitAll()
通过内存方式设置用户名密码和角色:admin,admin和USER
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
//不拦截路径中包含test的请求
.antMatchers("/", "/test").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().successForwardUrl("/hello").permitAll()
.and()
.logout().logoutUrl("/logout").logoutSuccessUrl("/login").permitAll()
.and()
.httpBasic();
http.csrf().disable();
}
@Override
public void configure(WebSecurity web) throws Exception{
super.configure(web);
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("admin").password("admin").roles("USER");
//在内存中创建了一个用户,该用户的名称为user,密码为password,用户角色为USER
}
}
3、Spring boot应用方式启动
(1)不用登录可以直接访问test接口
(2)用户名和密码登录访问hello接口,Spring Security自带的简单登录页面
github地址:Spring Boot