Spring Security 基本介绍,初窥路径

Spring Security 基本介绍和环境搭建

实验介绍

Spring Security 是一个非常强大的身份验证和授权控制框架。为了满足企业项目的不同需求,它提供了很多定制化开发的解决方案,通过简单的调整配置,就能为我们的应用提供一套可靠的安全保障。本节课程主要任务就是搞清楚 Spring Security 是干什么的,以及它的基本用法。

知识点

  • 系统安全和系统保护设计
  • Spring Security 核心功能介绍
  • Spring Security 项目搭建
  • Spring Security 的基本操作

系统安全和系统保护设计

在实际开发过程中,为了保证我们的系统能够安全稳定的运行下去,一般都要从下面两点来考虑:

  1. 系统安全性:防止非法入侵、非法请求、非法拦截等。我们需要阻止和屏蔽不信任的请求源访问,保证数据的安全可靠,不被人窃取。
  2. 系统健壮性:也就是系统可用性,最常见的解决方案就是做服务 “冗余”。当然量级够大的话,要做的事情会很多很多,比如限流、熔断、降级等等。

这里只简单的谈一谈系统的安全性,在项目的开发中需要从全方位、多角度做工作,以确保整个业务链路、整个体系范围都能保证安全。下面就大致介绍下在实际开发过程中,开发者经常用到的一些方法:

  • 数据校验,包括前端 js 校验和后端校验,其实前端校验主要是为了体验,也就是尽可能降低出错率,提高一次性提交的成功率。也可以说前端校验规则是后端校验的子集。

  • 防止命令注入,比如最常见的 SQL 注入,它不是利用操作系统的 BUG 来实现攻击,而是针对程序员编程时的疏忽,通过 SQL 语句,实现无帐号登录,甚至篡改数据库。

  • 认证安全,对于使用应用的实体,无论是人还是系统程序,都应当做到对每个请求都能找到对应的责任实体。因此,在处理请求前,要先对认证信息进行检测。

  • 登录鉴权,即要控制这个用户登录后能在系统中做什么,比如一般要把用户分为外部用户、员工等。

  • 数据加密,对于敏感数据,不得明文传输和明文存储。如数据存储中,密码等信息我们可以加密后再存储;数据传输中,对密文使用 DES3/RSA 加密。

  • 请求签名,在外部请求时也是常见的处理方式,只有通过接口签名验证的请求,才信任为合法的请求。

在系统的安全方面,我们的 Spring Security 框架,解决的最主要的问题就是 认证安全 和 登录鉴权。

Spring Security 核心功能介绍

Spring Security 其核心就是一组过滤器链,项目启动后将会自动配置。最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在 Spring Security 中一种过滤器处理一种认证方式。比如,对于 username password 认证过滤器来说:

  • 会检查是否是一个登录请求;
  • 是否包含 username 和 password (也就是该过滤器需要的一些认证信息);
  • 如果不满足则放行给下一个。

然后下一个认证过滤器,再次按照自身职责判定是否是自身需要的信息。中间可能还有更多的认证过滤器,只要有一个认证过滤器通过了,就是用户登录成功。

在整个过滤器中的最后一环是 FilterSecurityInterceptor,这里会判定该请求是否能进行访问 REST 服务,如果被拒绝了就会抛出不同的异常(根据具体的原因)。

Exception Translation Filter 会捕获抛出的错误,然后根据不同的认证方式进行信息的返回提示。

项目搭建

概念一下说多了也未必好理解,还是先上手,后面再慢慢熟悉比较好。打开实验楼环境,依次点击 Terminal --> New Terminal(打开命令行),可以看到下方出现命令行工具,创建我们的第一个项目(hello_security),直接输入下面的命令:

mvn archetype:generate -DgroupId=com.shiyanlou -DartifactId=hello_security -DarchetypeArtifactId=maven-archetype-webapp

Spring Security 基本介绍,初窥路径_第1张图片

输入完,然后直接回车即可自动创建项目。我们创建一个基于 Spring Boot 的 Web 项目,maven 全部依赖如下:
hello_security/pom.xml


    
        
            org.springframework.boot
            spring-boot-starter-parent
            2.0.8.RELEASE
            import
            pom
        
    



    
        junit
        junit
        3.8.1
        test
    
    
        org.springframework.boot
        spring-boot-starter-thymeleaf
    
    
        org.springframework.boot
        spring-boot-starter-web
    

Spring Security 基本介绍,初窥路径_第2张图片

这个项目就是个简单的 Spring Boot 项目,先把需要的目录创建好,按照下面的目录结构创建出来:

Spring Security 基本介绍,初窥路径_第3张图片

也就是在 src/main/ 下创建 java 目录,再在其下面创建 com/shiyanlou 包目录,同时在该目录下创建我们的 Spring Boot 启动类:
hello_security/src/main/java/com/shiyanlou/Application.java

package com.shiyanlou;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

再在 src/main/resources/ 下创建 templates 目录,然后在 src/main/resources/templates 目录下创建两个页面:
home.html



  
    home.html
  
  
    

Welcome!

Click here to see a greeting.

hello.html



  
    hello.html
  
  
    

Hello world!

页面很简单,要做的事也很简单:点击 home 视图中的 “/hello” 链接跳转到 hello 页面。首先配置视图控制器来暴露这些页面, 如下是一个典型的 Spring MVC 配置类:

hello_security/src/main/java/com/shiyanlou/MvcConfig.java

package com.shiyanlou;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MvcConfig implements WebMvcConfigurer {

  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/home").setViewName("home");
    registry.addViewController("/").setViewName("home");
    registry.addViewController("/hello").setViewName("hello");
    registry.addViewController("/login").setViewName("login");
  }

第四个视图控制器引用另一个名为 login 的视图,后面会用上,先不管。现在可以启动项目了,这里注意,在实验楼 WebIDE 中运行项目需要命令行启动,必须在 pom.xml 中添加 maven 插件:

hello_security/pom.xml



  4.0.0

  com.shiyanlou
  hello_security
  1.0-SNAPSHOT

  
    
      
      
        org.springframework.boot
        spring-boot-maven-plugin
        
          com.shiyanlou.Application
        
        
          
            
              repackage
            
          
        
      
    
  

同时命令行中切换到自己的项目目录下(和 pom.xml 同级),再执行 mvn spring-boot:run 命令:

Spring Security 基本介绍,初窥路径_第4张图片

等项目启动完成后,点击右侧菜单的 Web 服务 按钮,将会自动打开浏览器,看到下面的运行效果:

Spring Security 基本介绍,初窥路径_第5张图片

本文内容来自蓝桥云课《玩转 Spring Security 从入门到实战》 ,点击可查看全部内容。

Spring Security 基本介绍,初窥路径_第6张图片

你可能感兴趣的:(spring,java)