博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring security 基本原理(一)
阅读量:4186 次
发布时间:2019-05-26

本文共 2387 字,大约阅读时间需要 7 分钟。

Spring Security介绍

Spring Security 是一个基于Spring的安全框架,Spring boot更好的集成了Spring Security的开发工作。在Spring 框架基础上,Spring Security 充分利用了依赖注入DI和 面向切面编程AOP功能,为应用系统提供声明式的安全访问控制功能,减少了企业安全控制编写大量重复代码的功能,是一个轻量级的安全框架。

Spring Security 的核心功能有哪些?

1、 认证(Authentication):指的是验证某个用户是否为系统的合法主体,也就是说用户能否访问该系统。

2、授权(Authorization):指的是验证某个用户是否有权限执行某个操作。

Spring Security原理

在这里插入图片描述

Spring Security 功能实现主要是由一系列的过滤器链相互配合完成的。
绿色的过滤器链可以通过配置进行修改的,其他部分的过滤器不能进行更改。

请求过程:

  • 请求通过UsernamePasswordAuthenticationFilter获取用户信息
  • ExceptionTransationFilter是认证异常进行捕获,
  • FilterSecurityInterceptor 是对在 WebSecurityConfigurerAdapter的实现类中的指定的权限进行验证。
  • 处理自己实现的controller 接口代码。

1、springSecurityFilterChain中各个过滤器怎么创建的只需了解即可。不要太过关注。

2、重点记忆UsernamePasswordAuthenticationFilter,ExceptionTranslationFilter, FilterSecurityInterceptor这三个过滤器的作用及源码分析。

3、重点记忆认证中Authentication,AuthenticationManager,ProviderManager, AuthenticationProvider,UserDetailsService,UserDetails这些类的作用及源码分析。

4、重点记忆授权中FilterInvoction,SecurityMetadataSource,AccessDecisionManager的作用。

框架的核心组件

SecurityContextHolder: 提供对SecurityContext的访问。

SecurityContext: 持有uthentication对象和其他可能需要的信息。
AuthenticationManager: 其中可以包含多个AuthenticationProvider。
ProviderManager: 为AuthenticationManager接口的实现类。
AuthenticationProvider: 主要用来进行认证操作的类,调用其中的authenticate()方法进行认证操作。
Authentication: Spring Security方式的认证主体。
GrantedAuthority: 对认证主题的应用层面的授权,含当前用于的权限信息,通常使用角色表示。
**UserDetails:**构建Authentication对象必须的信息,可以自定义,可能需要访问db得到。
**UserDetailsService:**通过username构建UserDetails对象,通过loadUserByUsername根据username获取UserDetails对象。

基于Spring boot的demo

1、 添加依赖

添加依赖后,默认所有的请求就都需要进行验证。

org.springframework.boot
spring-boot-starter-security

2、自定义配置

实现WebSecurityConfigurerAdapter 类

@Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        // 定义请求方式 是form表单 还是 basics模式        http.formLogin()//          http.httpBasic()                .and()                .authorizeRequests()                .anyRequest()                .authenticated();    }}

3、controller

@Controllerpublic class HelloController {    @GetMapping("/hello")    @ResponseBody    public String hello () {        return "hello spring security";    }}

当请求 /hello 时会自动跳转到login登录页面。

需要在配置类中 指定为 form表单格式。

basic模式:是通过请求头Authentication: Basic 的方式进行传输用户信息,在BasicAuthenticationFilter中进行base64 解码,获取用户信息。

转载地址:http://gbfoi.baihongyu.com/

你可能感兴趣的文章
XHProf-php轻量级的性能分析工具
查看>>
Jackson Tree Model Example
查看>>
如何防止sql注入
查看>>
[转]C语言printf
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
vue项目打包后无法运行报错空白页面
查看>>
面试题:强制类型转换
查看>>
Decorator模式
查看>>
Template模式
查看>>
Observer模式
查看>>
高性能服务器设计
查看>>
图文介绍openLDAP在windows上的安装配置
查看>>
Pentaho BI开源报表系统
查看>>
Pentaho 开发: 在eclipse中构建Pentaho BI Server工程
查看>>
android中SharedPreferences的简单例子
查看>>
android中使用TextView来显示某个网址的内容,使用<ScrollView>来生成下拉列表框
查看>>
andorid里关于wifi的分析
查看>>
Hibernate和IBatis对比
查看>>
Spring MVC 教程,快速入门,深入分析
查看>>