欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 security表单认证或HttpBasic

当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表单认证或HttpBasic

原理

spring security表单认证或HttpBasic

如上图所示,Spring Security包含了众多的过滤器,这些过滤器形成了一条链,所有请求都必须通过这些过滤器后才能成功访问到资源。其中UsernamePasswordAuthenticationFilter过滤器用于处理基于表单方式的登录认证,而BasicAuthenticationFilter用于处理基于HTTP Basic方式的登录验证,后面还可能包含一系列别的过滤器(可以通过相应配置开启)。在过滤器链的末尾是一个名为FilterSecurityInterceptor的拦截器,用于判断当前请求身份认证是否成功,是否有相应的权限,当身份认证失败或者权限不足的时候便会抛出相应的异常ExceptionTranslationFilter捕获并处理,所以我们在ExceptionTranslationFilter过滤器用于处理了FilterSecurityInterceptor抛出的异常并进行处理,比如需要身份认证时将请求重定向到相应的认证页面,当认证失败或者权限不足时返回相应的提示信息。

详情请参考https://mrbird.cc/Spring-Boot&Spring-Security.html

 

相关标签: spring security