SpringSecurity简介及其入门案例

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringSecurity简介及其入门案例相关的知识,希望对你有一定的参考价值。

文章目录

SpringSecurity

概念

官网介绍:https://spring.io/projects/spring-security/

Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在 Spring 应用上下文中配置的 Bean,充分利用了 Spring IoC,DI 和 AOP 功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。

  • 用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。
  • 用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。

Spring Security 的主要核心功能为 认证和授权,整个架构也是基于这两个核心功能去实现的。

实现原理

验证和授权的过程及本质

用户一次完整的登录验证和授权,是一个请求经过 层层拦截器从而实现权限控制,整个 web 端配置为 DelegatingFilterProxy,它并不实现真正的过滤,而是所有过滤器链的代理类,真正执行拦截处理的是由 spring 容器管理的各个filter bean 组成的 filterChain。

众所周知 想要对 Web 资源进行保护,最好的办法莫过于 Filter 和 Interceptor。
所以 SpringSecurity 在我们进行用户认证以及授予权限的时候,通过各种各样的拦截器来控制权限的访问,从而实现安全。

主要过滤器

具体原理以后再讲,这里只要知道是通过层层过滤器就行了,细节也太多了,各个功能慢慢探究

如下为其主要过滤器:

WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilter
HeaderWriterFilter
CorsFilter
LogoutFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
SessionManagementFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
UsernamePasswordAuthenticationFilter
BasicAuthenticationFilter

核心组件简介

Spring Security bean 的核心类

核心类说明
SecurityContextHolder提供对 SecurityContext 的访问
SecurityContext持有 Authentication 对象和其他可能需要的信息
AuthenticationManager其中可以包含多个 AuthenticationProvider
ProviderManager对象为 AuthenticationManager 接口的实现类
AuthenticationProvider主要用来进行认证操作的类 调用其中的 authenticate()方法去进行认证操作
AuthenticationSpring Security 方式的认证主体
GrantedAuthority对认证主题的应用层面的授权,含当前用户的权限信息,通常使用角色表示
UserDetails构建 Authentication 对象必须的信息,可以自定义,可能需要访问 DB 得到
UserDetailsService通过 username 构建 UserDetails 对象,通过loadUserByUsername 根据 userName 获取 UserDetail 对象 (可以在这里基于自身业务进行自定义的实现 如通过数据库,xml,缓存获取等)

入门案例

引入依赖

<!-- 引入springsecurity 依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<!--spring security依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <version>2.6.3</version>
</dependency>
<!--fastjson-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.74</version>
</dependency>

在我们导入 spring-boot-starter-security 启动器后,Spring Security 已经生效,默
认拦截全部请求,如果用户没有登录,跳转到内置登录页面。

在浏览器输入:http://localhost:8080/后会显示下面页面

在resources下建立static目录,然后再static目录下创建index.html

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>index.html</h1>
    <h1>自定义index页面</h1>
</body>
</html>

默认的 username 为 user,password 打印在控制台中。


我们登入进去,就能看见我们编写的index页面

好,入门了,牛了你就

以上是关于SpringSecurity简介及其入门案例的主要内容,如果未能解决你的问题,请参考以下文章

一SpringSecurity框架介绍及入门案例

Shiro简介入门案例web容器的集成

Java 安全框架Apache Shiro学习入门(Shiro 架构及其组件)

Java 安全框架Apache Shiro学习入门(Shiro 架构及其组件)

[SpringSecurity]HelloWorld入门案例

SpringSecurity 入门案例