前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不得不知道的Spring Security的基本原理

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

作者头像
用户7386338
发布2020-05-29 16:23:19
1.3K0
发布2020-05-29 16:23:19
举报
文章被收录于专栏:Java患者

前言

由于我们的API接口,在服务启动后,是在无保护的状态下。任何人只要知道服务的地址,都可以访问我们开发的这些服务。这种情况在我们真实的企业级应用开发中是不允许的。我们需要对用户进行认证和授权,来保证我们合法的用户和有权限的用户才能访问。

SpringSecurity这个框架就是来做这种事情的,他提供了3个核心的功能:

  • 认证:就是告诉系统你是谁,实际上就是我们常说的登录。
  • 授权:就是指定当前的用户你能什么,不能干什么。
  • 攻击防护:如果黑客通过伪造身份,我们前面的两种操作就无效了的。而SpringSecurity的核心功能,就是它可以有效防止伪造身份。

Spring Security的默认配置

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

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

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

第一个表单登录例子

我们用Spring Security来实现通过表单来登录,并且所有请求都需要授权才能访问的例子。

首先创建一个继承继承WebSecurityConfigurerAdapter的类,它是Spring Security提供的web安全的适配器类,然后重写configure(HttpSecurity http)方法。

代码语言:javascript
复制
@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // http.httpBasic()  这是之前httpBasic的登录
        // 表单登录(认证)
        http.formLogin()
                .and()
                // 下面的都是对请求进行授权配置
                .authorizeRequests()
                // 是指任何请求
                .anyRequest()
                // 都需要授权
                .authenticated();
    }
}

这时我们访问之前的服务,会跳到一个表单登录页面:

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

Spring Security的基本原理

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

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

  • UsernamePasswordAuthenticationFilter:处理表单的认证方式。它会检查你的请求是不是一个登录请求,带不带用户名和密码。如果带,就会尝试认证处理。如果没带,则会把请求给下一个过滤器,让他来处理。
  • BasicAuthenticationFilter:处理Http Basic的认证方式。它会在在HTTP请求头部看到有没有basic的信息。如果有就拿出来并且做Base64解码,取出用户名和密码尝试登录。

其他过滤器认证处理同理,如果有一个请求认证成功了,他就对请求标记。过滤器链最后一环是FilterSecurityInterceptor,这个过滤器会读取我们的配置,来校验请求有没有权限访问最终的服务。如果不能访问,他会根据其原因来抛出不同的异常,这些异常会被它前面的过滤器ExceptionTranslationFilter捕获到,并且做出相应的处理。比如前面配置了表单登录,它就引导用户去表单登录。

这就是Spring Security最基本的原理,Spring Security的功能都是建立在这个过滤器链基础上的。需要注意的是,认证的过滤器我们是可以通过配置来控制是否生效的,而其他的过滤器不行。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java患者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring Security的默认配置
  • 第一个表单登录例子
  • Spring Security的基本原理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档