springsecurity中http.permitall与web.ignoring的区别说明

在Spring Security中,我们可以使用http.permitAll()或者web.ignoring()来配置哪些接口需要放行。这两个方法虽然都可以达到相同的效果,但它们的实现方式有所不同。

http.permitAll() 是Spring Security提供的一个方法,它允许我们定义一组匹配URL的表达式,这些URL可以被所有用户访问。例如:

protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/public/**").permitAll()
        .anyRequest().authenticated()
        .and()
        .formLogin().loginPage("/login").permitAll()
        .and()
        .logout().permitAll();
}

在上述示例中, http.antMatchers().permitAll()表达式指示Spring Security允许所有人访问在“/public/**”开头的所有URL。任何已认证用户仍可以通过访问此限制范围内的URL来访问应用程序功能。

web.ignoring()是Spring Boot框架提供的一个方法,其目的是使Spring Security不拦截匹配指定表达式的URL请求。它可以让Spring Security忽略某些静态资源或者其他不需要认证即可访问的URL。例如:

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/css/**", "/js/**", "/images/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/", "/home").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
            .logout()
            .permitAll();
    }
}

在上述示例中, web.ignoring().antMatchers()表达式指示Spring Security忽略所有以“/css/”、“/js/”、“/images/”开头的路径的请求。这将使得这些路径中的所有内容都不需要进行认证。

总结:

  • http.permitAll() 方法是Spring Security提供的,是在Security中完成配置的。
  • web.ignoring() 方法是Spring Boot框架提供的,是在Spring MVC中完成配置的。
  • http.permitAll() 方法适用于在Spring Security中进行全面的配置。
  • web.ignoring() 方法适用于在Spring Boot中进行简单的静态资源或其他不需要认证即可访问的路径配置。

示例代码:

//使用http.permitAll()方法配置
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/public/**").permitAll()
        .anyRequest().authenticated()
        .and()
        .formLogin().loginPage("/login").permitAll()
        .and()
        .logout().permitAll();
}

//使用web.ignoring()方法配置
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/css/**", "/js/**", "/images/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/", "/home").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
            .logout()
            .permitAll();
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springsecurity中http.permitall与web.ignoring的区别说明 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java中实现双数组Trie树实例

    实现双数组Trie树实例 在本文中,我们将学习如何在Java中使用双数组Trie树实现基于字典的字符串查找和匹配。 前置知识 在学习本文之前,你需要熟悉以下几个概念: Trie树:基于字符串构建的树状结构,用于快速搜索和匹配字符串。 双数组Trie树(Double-Array Trie,简称DAT):对Trie树进行空间优化的一种实现方式。 双数组Trie树…

    Java 2023年5月26日
    00
  • Java 异常机制Exception和自定义异常

    Java 异常机制是 Java 中非常重要的一部分,异常机制可以帮助我们区分代码执行过程中出现的不正常情况,而不是简单的让代码继续执行下去。在 Java 中异常机制主要分为 Throwable、Error 和 Exception 三个类别,其中 Throwable 是异常的父类,Error 和 Exception 继承自 Throwable 类,其中 Err…

    Java 2023年5月27日
    00
  • Java实现简单树结构

    下面我来详细讲解“Java实现简单树结构”的完整攻略。 什么是树结构? 树结构是一种经典的数据结构,它是由节点和边组成的层次结构。树结构中有一个顶点叫做根节点,其他节点则称作子节点。树结构具有以下特点: 根节点没有父节点; 每个节点都可能有若干个子节点; 除了根节点外,每个节点都有唯一一个父节点; 如果一个节点没有子节点,我们称其为叶节点。 如何实现树结构?…

    Java 2023年5月18日
    00
  • Java中I/O输入输出的深入讲解

    Java中I/O输入输出的深入讲解 什么是I/O I/O(Input/Output)指的是数据的输入和输出,是计算机与程序外部世界进行信息交互的方式之一。在Java中,I/O被视为一种Java API,提供了许多与文件、网络和其他I/O设备进行数据输入和输出的类和方法。 I/O的主要类型 字节流 字节流(Byte Stream)以字节为单位进行操作,可以读写…

    Java 2023年5月26日
    00
  • Java 8中 Stream小知识小技巧方法梳理

    Java 8中 Stream小知识小技巧方法梳理 什么是Stream Stream是Java 8中的新特性,它能够处理大批量的数据,并且可以并发处理数据,极大地提升了Java程序的性能。Stream与Java中的集合类(如List、Set、Map等)不同之处在于,它并不直接存储数据,而是对数据进行处理。 Stream的原理 Stream中的数据是以流的方式进…

    Java 2023年5月26日
    00
  • 记一次Flink遇到性能瓶颈

    前言 这周的主要时间花在Flink上面,做了一个简单的从文本文件中读取数据,然后存入数据库的例子,能够正常的实现功能,但是遇到个问题,我有四台机器,自己搭建了一个standalone的集群,不论我把并行度设置多少,跑起来的耗时都非常接近,实在是百思不得其解。机器多似乎并不能帮助它。 把过程记录在此,看后面随着学习的深入能不能解答出这个问题。 尝试过的修复方法…

    Java 2023年4月17日
    00
  • ibatis结合oracle批量插入三种方法的测评

    针对“ibatis结合oracle批量插入三种方法的测评”的完整攻略,我分步骤详细讲解如下: 1. 背景 在使用ibatis结合oracle进行数据插入时,我们常常会遇到需要批量插入大量数据的情况。为了提高插入效率,我们需要考虑如何优化插入方式。本篇攻略将介绍三种常见的批量插入方法,并进行对比测试。 2. 三种批量插入方法的介绍 2.1 JDBC批量插入 使…

    Java 2023年5月20日
    00
  • 什么是并发编程?

    以下是关于什么是并发编程的完整使用攻略: 什么是并发编程? 并发编程是指在多核处理器上,多个线程同时执行不同的任务,从而提高程序的执行效率。在并发编程中,需要考虑多个线程之间的协作和同步,以避免出现数据不一致或者数据污染的问题。 为了实现并发编程,可以采取以下措施: 1. 使用多线程 多线程是实现并发编程的基础,通过多线程可以让多个任务同时执行,从而提高程序…

    Java 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部