在 Spring Security Java Config 中创建多个 HTTP 部分

2024-01-03

使用 Spring Security XML 配置,您可以定义多个 HTTP 元素来为应用程序的不同部分指定不同的访问规则。中给出的示例8.6 高级命名空间配置 http://docs.spring.io/spring-security/site/docs/3.2.x/reference/html/security-filter-chain.html#filter-chains-with-ns定义应用程序的单独有状态和无状态部分,前者使用会话和表单登录,后者不使用会话和 BASIC 身份验证:

<!-- Stateless RESTful service using Basic authentication -->
<http pattern="/restful/**" create-session="stateless">
    <intercept-url pattern='/**' access='ROLE_REMOTE' />
    <http-basic />
</http>

<!-- Empty filter chain for the login page -->
<http pattern="/login.htm*" security="none"/>

<!-- Additional filter chain for normal users, matching all other requests -->
<http>
    <intercept-url pattern='/**' access='ROLE_USER' />
    <form-login login-page='/login.htm' default-target-url="/home.htm"/>
    <logout />
</http>

我不知道如何使用 Java Config 做同样的事情。禁用会话并为 Web 服务使用不同的入口点非常重要。现在我有以下内容:

@Override
public void configure(WebSecurity security)
{
    security.ignoring().antMatchers("/resource/**", "/favicon.ico");
}

@Override
protected void configure(HttpSecurity security) throws Exception
{
    security
            .authorizeRequests()
                .anyRequest().authenticated()
            .and().formLogin()
                .loginPage("/login").failureUrl("/login?loginFailed")
                .defaultSuccessUrl("/ticket/list")
                .usernameParameter("username")
                .passwordParameter("password")
                .permitAll()
            .and().logout()
                .logoutUrl("/logout").logoutSuccessUrl("/login?loggedOut")
                .invalidateHttpSession(true).deleteCookies("JSESSIONID")
                .permitAll()
            .and().sessionManagement()
                .sessionFixation().changeSessionId()
                .maximumSessions(1).maxSessionsPreventsLogin(true)
                .sessionRegistry(this.sessionRegistryImpl())
            .and().and().csrf()
                .requireCsrfProtectionMatcher((r) -> {
                    String m = r.getMethod();
                    return !r.getServletPath().startsWith("/services/") &&
                            ("POST".equals(m) || "PUT".equals(m) ||
                                    "DELETE".equals(m) || "PATCH".equals(m));
                });
}

使用这个我可以禁用我的 Web 服务的 CSRF 保护。但我确实需要一个完全独立的 HTTP 配置,以便我可以禁用会话并指定不同的入口点。我知道我可以使用requestMatcher or requestMatchers限制它适用的 URI,但您似乎无法使用它来创建单独的配置。这几乎就像我需要的two configure(HttpSecurity security)方法。


在 Spring Security 中模仿多个行为<http>Java 配置中的 XML 元素创建多个用于安全配置的类。一般来说,创建通用安全配置是最好/最简单的多个内部类对于安全定义HttpSecurity. See here https://github.com/spring-projects/spring-security-javaconfig/blob/905f30695ee61fd839e8519064ba1643258a2134/spring-security-javaconfig/src/test/groovy/org/springframework/security/config/annotation/web/SampleWebSecurityConfigurerAdapterTests.groovy#L274样品。

这里是官方 Spring Security 文档中的相关部分:
5.7 多重Http安全 https://docs.spring.io/spring-security/reference/servlet/configuration/java.html#_multiple_httpsecurity

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Spring Security Java Config 中创建多个 HTTP 部分 的相关文章

  • 存根方法时出现 InvalidUseOfMatchersException

    我有这个 TestNG 测试方法代码 InjectMocks private FilmeService filmeService new FilmeServiceImpl Mock private FilmeDAO filmeDao Bef
  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • Spring Security SAML2 使用 G Suite 作为 Idp

    我正在尝试使用 Spring Security 5 3 3 RELEASE 来处理 Spring Boot 应用程序中的 SAML2 身份验证 Spring Boot 应用程序将成为 SP G Suite 将成为 IDP 在我的 Maven
  • 需要使用 joda 进行灵活的日期时间转换

    我想使用 joda 解析电子邮件中的日期时间字符串 不幸的是我得到了各种不同的格式 例如 Wed 19 Jan 2011 12 52 31 0600 Wed 19 Jan 2011 10 15 34 0800 PST Wed 19 Jan
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 如何在 Spring 属性中进行算术运算?

  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • Java实现累加器类,提供Collector

    A Collector具有三种通用类型 public interface Collector
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • 是否可以使用 Java Guava 将函数应用于集合?

    我想使用 Guava 将函数应用于集合 地图等 基本上 我需要调整 a 的行和列的大小Table分别使所有行和列的大小相同 执行如下操作 Table
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • 如何使用play框架上传多个文件?

    我在用play framework 2 1 2 使用java我正在创建视图来上传多个文件 我的代码在这里 form action routes upload up enctype gt multipart form data
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数

随机推荐

  • iOS Swift - 如何使用核心数据存储数组?

    我是 iOS 开发新手 想知道应该指定哪种数据类型来存储多个字符串 数组 该应用程序与食物有关 我需要将多种成分存储为一个属性 我正在考虑将成分作为实体 但我只是想让初学者变得容易 我读过有关可转换类型的内容 但人们似乎不建议使用它来存储数
  • 如何在React中更改MUI Datepicker输入框的高度

  • 测试 ClickOnce 应用程序

    您将使用什么方法在多个用户中测试 ClickOnce 应用程序的新版本 与当前版本并排 是否有任何最佳实践 特别是当应用程序依赖于不同服务器来实现 SQL Web 服务等的实时 测试版本时 我们使用内部 DNS 来设置http applic
  • 学习 Haskell 是为了学习 Scala

    我读过一些问题 例如 Scala vs Haskell 讨论两种语言的优点或学习哪种语言 但我已经知道我想学习 Scala 我在大学时是一名Java程序员 现在主要使用PHP 我想学习 Scala 因为它看起来像是个人项目中 Java 的改
  • 抑制 VSCode 中的 ESLint 警告

    我正在使用 ESLint扩大 https marketplace visualstudio com items itemName dbaeumer vscode eslint在 VSCode 中格式化并检查我的 JavaScript 代码
  • 将我的应用程序添加到 tvOS 应用程序设置屏幕

    How do you add app settings to tvOS like you do in iOS I assume that just like iOS the screen below you can add the sett
  • 当滚动离开视图 android 时,项目动画在 recyclerview 中停止

    我有一个 Recyclerview 我正在为单个列表项内的视图设置动画 但是当我滚动 recyclerview 时 动画停止 这是因为 recyclerview 会从其视图中删除项目 因此当我们向后滚动时 它会将其取回 但现在我希望该动画继
  • 垂直对齐字体很棒的图标与
  • 内的文本
  • 我有一个使用很棒的字体的列表 因此它的类是fa ul ul class fa ul li class dept i class fa li fa fa stop i span Management span li li class dept
  • 在Linux中,为什么所有进程都有一个全局的/dev/stdin文件?

    不同进程的标准输入不应该是唯一的吗 如果是这样 标准输入文件的路径不应该是这样的 dev pid stdin而不是全局的 dev stdin 有人对此有想法吗 dev stdin是独一无二的 因为 它是一个符号链接 proc self fd
  • MFMessageComposeViewController 不工作

    我有一种简单的方法 可以获取一个参数 然后发送一条消息 它不起作用 Code void sendSMS NSString text MFMessageComposeViewController viewController MFMessag
  • 用于 Web 应用程序的 GetEntryAssembly

    Assembly GetEntryAssembly 不适用于网络应用程序 但是 我真的需要这样的东西 我使用一些在 Web 和非 Web 应用程序中使用的深度嵌套代码 我当前的解决方案是浏览 StackTrace 以查找第一个调用的程序集
  • 在 SQLite 数据库中存储 XML/HTML 文件 - 可能吗?

    是否可以直接将 XML HTML 文件存储在 SQLite 数据库中 我正在用 python 编写一个程序 该程序应该解析 XML HTML 文件并将值存储在数据库中 然而 XML HTML 文件中的字段可能会有所不同 我认为将整个 XML
  • 如何在 SmartOS 上使用 HotSpot DTrace 探针?

    在 Mac OS X 上 我可以通过运行以下命令找到运行 Java 程序的 HotSpot 探针 cody mello ashur 1 sudo dtrace ln hotspot Password Invalid connection c
  • 使用数组查询sqlite数据库android

    我如何使用字符串数组来查询 sqlite 数据库 我不断收到异常 SQliteException 绑定或列索引超出范围 String names new String values size values is an Arraylist S
  • 为什么 EF 返回代理类而不是实际实体?

    当我想要实际的实体类时 我在实体框架返回代理时遇到问题 我第一次运行代码时 一切都运行正常 没有代理 但之后的每次迭代 我的一个 DbSet 总是返回代理而不是实际类型 我在每次迭代后都会处理上下文 所以我不明白为什么第一次它有效 而之后每
  • 如何使 Win32/MFC 线程同步循环?

    我是 Windows 中多线程的新手 所以这可能是一个微不足道的问题 确保线程按步执行循环的最简单方法是什么 我尝试传递一个共享数组Events 到所有线程并使用WaitForMultipleObjects在循环结束时同步它们 但这会在一个
  • 对reportlab heisenbug 进行故障排除

    使用Django 1 4 Python 2 7 reportlab 开源版本 生成pdf 到目前为止 一切都进展顺利 以前的 pdf 生成 如 http 请求返回 下载生成的 pdf 文件 是在 Django 1 3 上进行的 并且不向公众
  • 如何使用 Rails 重定向到外部网站?

    我希望当鼠标悬停在链接上时 您会看到该链接看起来像这样 http www website com redirect to linkID2 http www website com redirct to linkID2 也许不完全一样 但尝试
  • 将 CGGradient 添加为 UILabel 的子图层会隐藏标签的文本

    我想添加渐变作为标签的背景 我使用以下代码来实现这一目标 但问题是 虽然标签上出现渐变颜色 但文本不可见 请帮忙 lblPatientDetail text PatientsDetails lblPatientDetail textColo
  • 在 Spring Security Java Config 中创建多个 HTTP 部分

    使用 Spring Security XML 配置 您可以定义多个 HTTP 元素来为应用程序的不同部分指定不同的访问规则 中给出的示例8 6 高级命名空间配置 http docs spring io spring security sit