当前位置:首页 > 科技  > 软件

全新Spring Security安全管理配置使用详解

来源: 责编: 时间:2024-02-02 17:00:41 323观看
导读环境:SpringBoot2.7.12 + JDK211. 简介Spring Security 是一个提供身份验证、授权和防护常见攻击的框架。它为确保命令式和反应式应用程序的安全提供一流的支持,是确保基于 Spring 的应用程序安全的事实标准。Spring Sc

环境:SpringBoot2.7.12 + JDK21Tr328资讯网——每日最新资讯28at.com

1. 简介

Spring Security 是一个提供身份验证、授权和防护常见攻击的框架。它为确保命令式和反应式应用程序的安全提供一流的支持,是确保基于 Spring 的应用程序安全的事实标准。Tr328资讯网——每日最新资讯28at.com

Spring Scurity核心分为2大模块:Tr328资讯网——每日最新资讯28at.com

  1. 认证(Authentication):认证是建立一个他声明的主体的过程(一个主体一般是指用户、设备或一些可以在你的应用程序中执行的其他系统)。常见的身份认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。
  2. 授权(Authorization):当身份认证通过后,去访问系统的资源,系统会判断用户是否拥有访问该资源的权限,只允许访问有权限的系统资源,没有权限的资源将无法访问,这个过程叫用户授权。比如会员管理模块有增删改查功能,有的用户只能进行查询,而有的用户可以进行修改、删除。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。

从Spring Security5.7开始之前的安全配置方式及Web授权处理方式发生了变化,接下来将详细介绍配置的变化。Tr328资讯网——每日最新资讯28at.com

2. 安全配置

2.1 配置方式

在5.7之前的版本自定义安全配置通过如下方式:Tr328资讯网——每日最新资讯28at.com

@Componentpublic class SecurityConfig extends WebSecurityConfigurerAdapter {  protected void configure(HttpSecurity http) throws Exception {    // ...  }}

在5.7之后推荐如下配置方式Tr328资讯网——每日最新资讯28at.com

@Configurationpublic class SecurityConfig {  @Bean  @Order(Ordered.HIGHEST_PRECEDENCE)  SecurityFilterChain controllerFilterChain(HttpSecurity http) throws Exception {    // ...    return http.build() ;  }}

通过配置安全过滤器链的方式配置,具体内部的配置细节还都是围绕着HttpSecurity进行配置。Tr328资讯网——每日最新资讯28at.com

2.2 配置不同的过滤器链

在一个配置文件中我们可以非常方便的配置多个过滤器链,针对不同的请求进行拦截。Tr328资讯网——每日最新资讯28at.com

@Configurationpublic class SecurityConfig {  @Bean  @Order(1)  SecurityFilterChain controllerFilterChain(HttpSecurity http) {    // 当前过滤器链只对/demos/**, /login, /logout进行拦截    http.requestMatchers(matchers -> matchers.antMatchers("/demos/**", "/login", "/logout")) ;    http.authorizeHttpRequests().antMatchers("/**").authenticated() ;    http.formLogin(Customizer.withDefaults()) ;    // ...    return http.build() ;  }  @Bean  @Order(2)  SecurityFilterChain managementSecurityFilterChain(HttpSecurity http) throws Exception {    // 该过滤器只会对/ac/**的请求进行拦截    http.requestMatchers(matchers -> matchers.antMatchers("/ac/**")) ;    // ...    http.formLogin(Customizer.withDefaults());    return http.build();  }}

以上配置了2个过滤器链,根据配置的@Order值,优先级分别:controllerFilterChain,managementSecurityFilterChain。当访问除上面指定的uri模式以为的请求都将自动放行。Tr328资讯网——每日最新资讯28at.com

2.3 用户验证配置

在5.7版本之前,我们通过如下配置配置内存用户Tr328资讯网——每日最新资讯28at.com

public class SecurityConfig extends WebSecurityConfigurerAdapter {  @Override  protected void configure(AuthenticationManagerBuilder auth) throws Exception {    auth.inMemoryAuthentication()      .passwordEncoder(NoOpPasswordEncoder.getInstance())      .withUser("admin")      .password("123123")      .authorities(Arrays.asList(new SimpleGrantedAuthority("ROLE_ADMIN"))) ;  }}

5.7 只有由于推荐的是通过自定义SecurityFilterChain的方式,所以我们需要通过如下的方式进行配置:Tr328资讯网——每日最新资讯28at.com

@Configurationpublic class SecurityConfig {  @Bean  @Order(0)  SecurityFilterChain controllerFilterChain(HttpSecurity http) throws Exception {    AuthenticationManagerBuilder builder = http.getSharedObject(AuthenticationManagerBuilder.class) ;    builder.inMemoryAuthentication()      .passwordEncoder(NoOpPasswordEncoder.getInstance())      .withUser("admin")      .password("123123")      .authorities(Arrays.asList(new SimpleGrantedAuthority("ROLE_ADMIN"))) ;    // ...  }}

2.4 授权方式

在5.7之后推荐配置认证授权的方式如下Tr328资讯网——每日最新资讯28at.com

@Beanpublic SecurityFilterChain apiSecurityFilterChain(HttpSecurity http) throws Exception {  http.authorizeHttpRequests().antMatchers("/users/**").hasAnyRole("ADMIN") ;  // ...  return http.build() ;}

通过上面的authorizeHttpRequests方式进行授权配置,会向过滤器链中添加AuthorizationFilter过滤器。在该过滤器中会进行权限的验证。Tr328资讯网——每日最新资讯28at.com

2.5 自定义授权决策

如果需要对请求的uri进行更加精确的匹配验证,如:/users/{id},需要验证只有这里的id值为666才方向。Tr328资讯网——每日最新资讯28at.com

@Beanpublic SecurityFilterChain apiSecurityFilterChain(HttpSecurity http) throws Exception {  http.authorizeHttpRequests(registry -> {    registry.antMatchers("/users/{id}").access(new AuthorizationManager<RequestAuthorizationContext>() {      @Override      public AuthorizationDecision check(Supplier<Authentication> authentication,          RequestAuthorizationContext object)        // 获取路径上的值信息,其中key=id,value=xxx        Map<String, String> variables         // 这里的第一个参数是boolean,确定了授权是否通过        return new AuthorityAuthorizationDecision(variables.get("id").equals("666"), Arrays.asList(new SimpleGrantedAuthority("D"))) ;      }    }) ;  }) ;}

2.6 全局认证

如果配置了多个不同的SecurityFilterChain,而每个认证都使用相同的用户体系,那么我们可以定义AuthenticationProvider或者UserDetailsService 类型的Bean即可。Tr328资讯网——每日最新资讯28at.com

@BeanUserDetailsService userDetailsService() {  return new UserDetailsService() {    @Override    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {      return null;    }  } ;}@BeanAuthenticationProvider authenticationProvider() {  return new AuthenticationProvider() {    @Override    public Authentication authenticate(Authentication authentication) throws AuthenticationException {      return null;    }    @Override    public boolean supports(Class<?> authentication) {      return false;    }  } ;}


Tr328资讯网——每日最新资讯28at.com

以上是本篇文章的全部内容, 希望对你有所帮助。Tr328资讯网——每日最新资讯28at.com

完毕!!!Tr328资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-71943-0.html全新Spring Security安全管理配置使用详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 我们一起聊聊如何提高API性能的综合策略

下一篇: Nodejs - 九步开启JWT身份验证

标签:
  • 热门焦点
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 重估百度丨“晚熟”的百度云,能等到春天吗?

    &copy;自象限原创作者|程心排版|王喻可2016年7月13日,百度云计算战略发布会在北京举行,宣告着百度智能云的正式启程。彼时的会场座无虚席,甚至排队排到了门外,在场的所有人几乎都
  • 签约井川里予、何丹彤,单视频点赞近千万,MCN黑马永恒文希快速崛起!

    来源:视听观察永恒文希传媒作为一家MCN公司,说起它的名字来,可能大家会觉得有点儿陌生,但是说出来下面一串的名字之后,或许大家就会感到震惊,原来这么多网红,都签约这家公司了。根
  • 冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    来源:直播观察提起&ldquo;冯提莫&rdquo;这个名字,很多网友或许听过,但应该不记得她是哪位主播了。其实,作为曾经的&ldquo;斗鱼一姐&rdquo;,冯提莫在游戏直播的年代影响力不输于现
  • iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,iQOO 11不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞屏,同时在快充
  • 荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    2022年第一季度临近尾声,在该季度内,许多品牌陆续发布自己的最新产品,让大家从全新的角度来了解当今的手机技术。手机是电子设备中,更新迭代十分迅速的一款产品,基
Top