Spring Security 授权认证部分学习记录

简介:

Spring Security官方文档

 Spring Security和Shiro都是安全框架,其中包含了很多内容本文主要记录一下自己理解的授权认证部分希望能表达的尽量简洁和完整,欢迎交流。

 formlogin主体流程

3b22a198_88dc_4b0b_9513_4231be596872

其中认证相关Filter负责构建Token实体(未认证),并交给AuthenticationProvider进行验证Token并重新构建Token实体(已认证)。具体可参见org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter内源码。

还包含其它认证流程如BasicAuthenticationFilter,DigestAuthenticationFilter等,官方给的formlogin就是UsernamePasswordAuthenticationFilter相关的一整套流程,有兴趣的话可以看下formlogin这个方法对应的源码,其中包含了很多内容这里主要记录的是认证授权。

配置说明

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
 /**
  * 配置认证相关信息自定义AuthenticationProvider,UserDetailsService等
  * @param auth
  * @return void
  * @author mjm
  * @date 2020/1/20 16:08
  */

 @Override
 protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  super.configure(auth);
 }

 /**
  * 整体设置,异常处理,需忽略的url等
  * @param web
  * @return void
  * @author mjm
  * @date 2019/12/30 14:07
  */
 @Override
 public void configure(WebSecurity web) {
  web.ignoring().antMatchers(HttpMethod.OPTIONS, "/**")
    .antMatchers("/css/**", "/fonts/**",
      "/img/**", "/js/**", "/plugins/**");
 }
 /**
  * 请求过程相关配置,formlogin,权限验证,cors,自定义过滤器等
  * @author mjm
  * @date 2020/1/20 16:13
 * @param http
  * @return void
  */
 @Override
 protected void configure(HttpSecurity http) throws Exception {
  http.cors().disable().csrf().disable().headers().frameOptions().disable();
  http.formLogin();
  http.authorizeRequests().antMatchers("/**").access("@sysAuthorize.check(authentication,request)");
 }
}

HttpSecurity说明:

1. 匹配url的顺序是从上至下

  1. access是自定义权健部分具体可参见官网中"Referring to Beans in Web Security Expressions"这一段,其中能传递的参数只有authentication(认证信息),request
  2. 自定义过滤器通过http.addFilterXXXX来添加可以指定过滤器的顺序
  3. 配置了formlogin SpringSecurity会通过默认配置实现一整套的认证流程,包含页面,但需要实现UserDetailsService

这里列举的是我认为比较重要的三个配置,WebSecurityConfigurerAdapter中包含很多其他的配置具体具体可参见源码

其它

1.自定义认证过程如何处理

继承AbstractAuthenticationProcessingFilter

public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) {
    //   token = xxx  
    return this.getAuthenticationManager().authenticate(token);
}
目录
相关文章
|
1月前
|
存储 安全 Java
Spring Boot整合Spring Security--学习笔记
Spring Boot整合Spring Security--学习笔记
52 0
|
11天前
|
安全 数据安全/隐私保护
Springboot+Spring security +jwt认证+动态授权
Springboot+Spring security +jwt认证+动态授权
|
3天前
|
安全 Java 数据安全/隐私保护
使用Spring Security进行Java身份验证与授权
【4月更文挑战第16天】Spring Security是Java应用的安全框架,提供认证和授权解决方案。通过添加相关依赖到`pom.xml`,然后配置`SecurityConfig`,如设置用户认证信息和URL访问规则,可以实现应用的安全保护。认证流程包括请求拦截、身份验证、响应生成和访问控制。授权则涉及访问决策管理器,如基于角色的投票。Spring Security为开发者构建安全应用提供了全面且灵活的工具,涵盖OAuth2、CSRF保护等功能。
|
4天前
|
安全 前端开发 Java
Spring Security的授权管理器实现
Spring Security的授权管理器涉及用户登录后的token验证和权限检查。当用户携带token访问时,框架会验证token合法性及用户访问权限。自定义授权管理器`TokenAuthorizationManager`需实现`AuthorizationManager<RequestAuthorizationContext>`接口,处理校验逻辑,包括解析token、判断用户角色与访问资源的匹配。配置中在`SecurityConfig`注册该管理器以生效。测试表明,具有不同角色的用户可访问相应权限的资源,否则返回403错误。
116 4
|
4天前
|
安全 Java Spring
Spring Security的授权&鉴权
该文档介绍了授权和鉴权的概念,主要分为Web授权和方法授权。Web授权通过URL拦截进行,而方法授权利用注解控制权限,粒度更细但耦合度高。在Web授权的案例中,展示了如何在Spring Security中对特定URL设置角色控制。此外,还列举了Spring Security内置的控制操作方法,如permitAll()、denyAll()和hasRole()等,用于定义不同类型的用户访问权限。
106 7
|
10天前
|
安全 Java 数据库
Spring Security加密解密
Spring Security加密解密
|
30天前
|
安全 Java 数据库
Spring Security 权限管理详解与案例
Spring Security 是 Spring 框架中用于提供认证和访问控制的模块。它保护了成千上万的应用程序,使其免受未经授权的访问。本文将详细介绍 Spring Security 的权限管理功能,并通过一个实际案例来展示其用法。
64 0
|
Java API Spring
Spring认证_Spring GraphQL
Spring GraphQL项目的创建以及面向 1.0 版本的初始里程碑的可用性。该项目集成了GraphQL Java和 Spring,并由两个团队合作开发。
Spring认证_Spring GraphQL
|
21天前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
38 0
|
29天前
|
缓存 安全 Java
Spring Boot 面试题及答案整理,最新面试题
Spring Boot 面试题及答案整理,最新面试题
106 0