天天看点

spring security基本知识前言一、spring security的核心类或接口二、spring security主要过滤器(按顺序)总结

@[TOC](spring security基本知识)##

spring security学习过程

文章目录

  • 前言
  • 一、spring security的核心类或接口
    • SecurityContextHolder:
    • Authentication:
    • UserDetailsService:
    • UserDetails:
    • GrantedAuthority:
  • 二、spring security主要过滤器(按顺序)
    • SecurityContextPersistenceFilter(无法被覆盖)
    • UsernamePasswordAuthenticationFilter
    • BasicAuthenticationFilter
    • ExceptionTranslationFilter(无法被覆盖)
    • AbstractSecurityInterceptor(无法被覆盖)
  • 总结

前言

记录一下自己大二暑假的学习内容

一、spring security的核心类或接口

SecurityContextHolder:

存储安全信息,使用localThread因此是线程安全,

Authentication:

SecurityContextHolder所存储安全信息的实例,可以在程序的任意一部分获取到该类实例,通常的使用实现类为UsernamePasswordAuthenticationToken,可以使用以下代码获Authentication实例

UserDetailsService:

向系统提供UserDeatils,只提供UserDeatil信息而不进行验证,验证过程有AuthenticationManager进行,可实现AuthenticationManager来自定义验证过程,可以使用UserServiceImpl类来实现该接口

UserDetails:

通过UserDetailsService提供必要的信息,用于构建Authentication对象,可以让User实体类来实现该接口,也可以使用类似代码创建实体类

User.builder()
                .username(username)
                .password(password)
                .authorities(authorities)
                .build();
           

GrantedAuthority:

授予到主体的权限,通常使用的实现类为SimpleGrantedAuthority,通常将role实体name属性作为作为权限字符串,可以类用类似代码创建GrantedAuthority集合的简单实现

roles.stream()
                .map(Role::getName)
                .map(SimpleGrantedAuthority::new)
                .collect(Collectors.toList());
           

二、spring security主要过滤器(按顺序)

使用java代码的配置可以使用以下几种策略来添加自己的过滤器

http
	//添加在某个过滤器前
	.addFilterBefore(MyFilter, ExceptionTranslationFilter.class)
	//添加在某个过滤器所在位置,如果是自定义的过滤器继承自spring security已有的过滤器
	//通常使用这个方法
    .addFilterAt(MyFilter, UsernamePasswordAuthenticationFilter.class)
    //添加在某个过滤器后
    .addFilterAfter(MyFilter, BasicAuthenticationFilter.class)
           

SecurityContextPersistenceFilter(无法被覆盖)

将每一个请求的上下文保存在SecurityContextHolder,并在会话结束后清理SecurityContextHolder。如果使用的session也会负责保存session信息

UsernamePasswordAuthenticationFilter

基于表单登录会使用该过滤器进行认证过程,开启表单登录后的登录请求会被该过滤器拦截,不处理具体的认证过程,认证过程将委托AuthenticationManager去进行,实现基于jwt的登录认证可以让自定义的过滤器继承该类

BasicAuthenticationFilter

官方文档的描述是负责处理http请求头部中的认证,因为token信息在http请求头中,所有可以继承该类来处理http请求头中的token信息

ExceptionTranslationFilter(无法被覆盖)

负责处理异常异常,由AuthenticationEntryPoint处理AuthenticationException以及匿名导致的AccessDeniedException,AccessDeniedHandler处理AccessDeniedException,可以分别实现这两个接口来进行自定义的处理,使用一下代码配置自定义的处理

http
	//自定义失败时的处理
	.exceptionHandling()
    .authenticationEntryPoint(restfulAuthenticationEntryPoint)
    .accessDeniedHandler(restfulAccessDeniedHandler)
    .and();
           

AbstractSecurityInterceptor(无法被覆盖)

非登录的请求都会到处此过滤器,spring security主要的流程都会在此过滤器中进行,详细的内容在权限控制里面写,默认实现是FilterSecurityInterceptor

总结

spring security的一些基本知识,介绍一些在自定义spring security是常见的类或接口