• 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

    结论

    最终可以发现我们可以自定义认证规则,让例如注册等不需要认证的请求直接放行,让其他请求进行认证操作后再进行放行
    
  • 相关阅读:
    【Nuxt】04 Nuxt2-SEO: sitemap.xml、seo优化、robots.txt
    WRF学习笔记之四:撰写WPS intermediate file添加海冰场/NCL学习/WRF进阶:如何向WRF添加额外气象场?
    Spring之BeanPostProcessor(bean后置处理器)
    加密狗 - 圣天诺
    ceph分布式存储系统
    Kafka核心原理第二弹——更新中
    c++ 小案例:判断质数&&猜数字&&用符号填补心形图案
    [附源码]计算机毕业设计云南美食管理系统Springboot程序
    Rescue-Prime hash STARK 代码解析
    微服务远程Debug,Nocalhost + Rainbond微服务开发第二弹
  • 原文地址:https://blog.csdn.net/weixin_45442617/article/details/139647780