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()方法去进行认证操作 |
Authentication | Spring 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简介及其入门案例的主要内容,如果未能解决你的问题,请参考以下文章
Java 安全框架Apache Shiro学习入门(Shiro 架构及其组件)
Java 安全框架Apache Shiro学习入门(Shiro 架构及其组件)