spring security表单认证或HttpBasic
程序员文章站
2022-05-05 16:33:31
...
FormLogin认证方式
- 创建一个Spring Boot项目,然后引入spring-boot-starter-security:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 创建一个对外的服务:
@RestController
public class DemoController {
@GetMapping("/hello")
public String hello() {
return "Hello SpringSecurity!";
}
}
- 启动项目并访问,会跳转到登录页面如下
当Spring项目中引入了Spring Security依赖的时候,项目会默认开启如下配置:
security.basic.enabled=true
这个配置开启了一个表单认证,所有服务的访问都必须先过这个认证,默认的用户名为user,密码由Sping Security自动生成,回到IDE的控制台,可以找到密码信息:
Using generated security password: 078db2a5-ae07-4a10-a85c-cf0162a7e966
输入用户名user,密码078db2a5-ae07-4a10-a85c-cf0162a7e966后,我们便可以成功访问/hello接口。
HttpBasic认证方式
- 配置SpringSecurity认证方式
@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic() // HttpBasic
// http.formLogin() // 表单方式
.and()
.authorizeRequests() // 授权配置
.anyRequest() // 所有请求
.authenticated(); // 都需要认证
}
}
- 启动项目并访问,会跳转到登录页面如下进行登录
原理
如上图所示,Spring Security包含了众多的过滤器,这些过滤器形成了一条链,所有请求都必须通过这些过滤器后才能成功访问到资源。其中UsernamePasswordAuthenticationFilter过滤器用于处理基于表单方式的登录认证,而BasicAuthenticationFilter用于处理基于HTTP Basic方式的登录验证,后面还可能包含一系列别的过滤器(可以通过相应配置开启)。在过滤器链的末尾是一个名为FilterSecurityInterceptor的拦截器,用于判断当前请求身份认证是否成功,是否有相应的权限,当身份认证失败或者权限不足的时候便会抛出相应的异常。ExceptionTranslationFilter捕获并处理,所以我们在ExceptionTranslationFilter过滤器用于处理了FilterSecurityInterceptor抛出的异常并进行处理,比如需要身份认证时将请求重定向到相应的认证页面,当认证失败或者权限不足时返回相应的提示信息。
下一篇: 线程的几种状态
推荐阅读
-
Spring Security认证提供程序示例详解
-
详解最简单易懂的Spring Security 身份认证流程讲解
-
Spring Security在标准登录表单中添加一个额外的字段
-
2 Spring Security详解(认证用户)
-
spring security自定义认证登录的全过程记录
-
Spring Security 表单登录功能的实现方法
-
Spring Security OAuth2认证授权示例详解
-
Java开发之spring security实现基于MongoDB的认证功能
-
详解最简单易懂的Spring Security 身份认证流程讲解
-
spring security自定义认证登录的全过程记录