• SpringSecurity6从入门到实战之SpringSecurity6自定义认证规则


    SpringSecurity6从入门到实战之SpringSecurity6自定义认证规则

    Spring Security 中默认所有的 http 请求都需要先认证通过后,才能访问。那么, 如何指定不需要认证就可以直接访问的资源呢?比如 用户的登录页面和注册页面,都是不需要认证就必须能被直接访问的。这就需要设置自定义的URL认证规则

    SpringSecurity5.x自定义认证与6.x

    # 在 SpringSecurity5.x中( 了解,已被废弃 )
        // 自定义配置类 继承 WebSecurityConfigurerAdapter 类覆盖 configure() 方法
        @Configuration
        public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
           @Override
           protected void configure(HttpSecurity http) throws Exception {
               http.authorizeHttpRequests()
                    .mvcMatchers("/hello").permitAll()
                    .anyRequest().authenticated()
                    .and().formLogin();
           }
        }
    # 在 SpringSecurity6.x 中
        // 自定义配置类 使用注解 @EnableWebSecurity 配置 SpringSecurity
    

    开发示例

    创建一个新的controller

    /test

    package com.example.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
        @RequestMapping("/hello")
        public String hello() {
            System.out.println("/hello");
            return "hello...";
        }
    
        @RequestMapping("/test")
        public String test() {
            System.out.println("/test");
            return "test...";
        }
    }
    

    方便与/hello对比进行测试

    根据SpringSecurity6.x自定义认证规则配置

    新建MyWeSecurityConfig自定义配置类

    package com.example.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.web.SecurityFilterChain;
    
    @Configuration
    @EnableWebSecurity
    public class MyWeSecurityConfig {
        @Bean
        public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            //放行hello和test
            http.authorizeHttpRequests().requestMatchers("/hello", "test").permitAll()
                //所有请求都需要进行认证
                    .anyRequest().authenticated()
                //进行表单登录验证
                .and().formLogin();
            return http.build();
    
        }
    }
    

    测试

    image.png

    image.png

    结论

    最终可以发现我们可以自定义认证规则,让例如注册等不需要认证的请求直接放行,让其他请求进行认证操作后再进行放行
    
  • 相关阅读:
    python和shell脚本,每隔五分钟将远端服务器中的文件夹数据下载到跳板机
    Oracle 层级查询(Hierarchical Queries)
    BigDecimal 详解
    Ubuntu服务器安全性提升:修改SSH默认端口号
    html5&css&js代码 007 文章排版 颜真卿《述张长史笔法十二意》
    Win11更改系统文件夹的默认保存位置方法分享
    基于STM32程序万年历液晶1602显示-proteus仿真-源程序
    给Fetch添加超时功能
    python获取两个JSON 的差异
    在数据分析中,对缺失值解决方案的分析
  • 原文地址:https://blog.csdn.net/weixin_45442617/article/details/139647780