不得不知道的Spring Security的基本原理

谁践踏了优雅 2023-02-21 11:47 30阅读 0赞

微信公众号:Java患者

专注Java领域技术分享

前言

  1. 由于我们的API接口,在服务启动后,是在无保护的状态下。任何人只要知道服务的地址,都可以访问我们开发的这些服务。这种情况在我们真实的企业级应用开发中是不允许的。我们需要对用户进行认证和授权,来保证我们合法的用户和有权限的用户才能访问。
  2. SpringSecurity这个框架就是来做这种事情的,他提供了3个核心的功能:
  • 认证:就是告诉系统你是谁,实际上就是我们常说的登录。
  • 授权:就是指定当前的用户你能什么,不能干什么。
  • 攻击防护:如果黑客通过伪造身份,我们前面的两种操作就无效了的。而SpringSecurity的核心功能,就是它可以有效防止伪造身份。

Spring Security的默认配置

  1. 默认情况下,在项目中有Spring Security相关的jar包。Spring Security会自动帮我们做一些安全的配置。这时候我们访问我们写的服务时候,它会让我们去填用户名和密码。

format_png

  1. 用户名是默认的,就是“user”,密码是我们启动时,控制台给我们打印的那一行日志。我们登陆后就可以拿到我们服务的响应了。

format_png 1

  1. 从这个例子中,我们可以看到,在我们不做任何的配置时,Spring Security它把我们所有的访问都给我们保护起来了。这种默认的行为并不能满足我们实际开发的需要,那么我们该如何自定义并覆盖它这种配置?、

第一个表单登录例子

  1. 我们用Spring Security来实现通过表单来登录,并且所有请求都需要授权才能访问的例子。
  2. 首先创建一个继承继承WebSecurityConfigurerAdapter的类,它是Spring Security提供的web安全的适配器类,然后重写configure(HttpSecurity http)方法。
  3. @Configuration
  4. public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
  5. @Override
  6. protected void configure(HttpSecurity http) throws Exception {
  7. // http.httpBasic() 这是之前httpBasic的登录
  8. // 表单登录(认证)
  9. http.formLogin()
  10. .and()
  11. // 下面的都是对请求进行授权配置
  12. .authorizeRequests()
  13. // 是指任何请求
  14. .anyRequest()
  15. // 都需要授权
  16. .authenticated();
  17. }
  18. }
  19. 这时我们访问之前的服务,会跳到一个表单登录页面:

format_png 2

  1. 用户名还是“user”,密码依然是控制台打印的默认密码。

Spring Security的基本原理

  1. Spring Security最核心的东西是一个过滤器链,这些过滤器在Spring boot启动的时候会帮我们配置上。

format_png 3

下面是2个常见的认证过滤器:

  • UsernamePasswordAuthenticationFilter:处理表单的认证方式。它会检查你的请求是不是一个登录请求,带不带用户名和密码。如果带,就会尝试认证处理。如果没带,则会把请求给下一个过滤器,让他来处理。
  • BasicAuthenticationFilter:处理Http Basic的认证方式。它会在在HTTP请求头部看到有没有basic的信息。如果有就拿出来并且做Base64解码,取出用户名和密码尝试登录。
  1. 其他过滤器认证处理同理,如果有一个请求认证成功了,他就对请求标记。过滤器链最后一环是FilterSecurityInterceptor,这个过滤器会读取我们的配置,来校验请求有没有权限访问最终的服务。如果不能访问,他会根据其原因来抛出不同的异常,这些异常会被它前面的过滤器ExceptionTranslationFilter捕获到,并且做出相应的处理。比如前面配置了表单登录,它就引导用户去表单登录。
  2. 这就是Spring Security最基本的原理,Spring Security的功能都是建立在这个过滤器链基础上的。需要注意的是,认证的过滤器我们是可以通过配置来控制是否生效的,而其他的过滤器不行。

查看format_png 4

发表评论

表情:
评论列表 (有 0 条评论,30人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring Security工作原理

    1 结构总览 Spring Security所解决的问题就是安全访问控制,而安全访问控制功能其实就是对所有进入系统的请求进行拦截, 校验每个请求是否能够访问它所期望的资源