• 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

    结论

    最终可以发现我们可以自定义认证规则,让例如注册等不需要认证的请求直接放行,让其他请求进行认证操作后再进行放行
    
  • 相关阅读:
    Java EnumMap clear()具有什么功能呢?
    Android Framework | 读懂异常调用栈
    怎样选择合适的CRM客户管理系统?
    Java线上云酒馆单预约系统源码小程序源码
    连接数据库时遇到的bug1号
    深度卷积神经网络是什么,卷积神经网络教学视频
    说企业自研应用是误区的,非蠢即坏
    Page Cache的产生和释放
    WAF绕过-漏洞发现之代理池指纹探针 47
    vue v-for
  • 原文地址:https://blog.csdn.net/weixin_45442617/article/details/139647780