Web 服务和用户的 Spring 安全性

2023-12-24

我们有一个 Web 应用程序,我们希望使用 Spring Security 以两种不同的方式保护它:

1) 使用登录表单进行身份验证并有权访问某些服务的用户。

2) 使用摘要身份验证保护的其他服务(用户 + 密码在请求的标头中传递)- 由其他 Web 应用程序使用,因此没有登录表单。

其中每一个都可以独立工作,但我们无法让它们在同一个网络应用程序中工作。 当我们尝试使用这两个 xml 运行 Web 应用程序时,我们会收到以下错误:

A universal match pattern ('/**') is defined  before other patterns in the filter chain, causing them to be ignored. Please check the ordering in your <security:http> namespace or FilterChainProxy bean configuration

用户的 security.xml:

<security:http use-expressions="true">
    <security:intercept-url pattern="/user/login"
        access="permitAll" />
    ...
    <security:intercept-url pattern="/**"
        access="isAuthenticated()" />

    <security:form-login
        authentication-success-handler-ref="userAuthenticationSuccessHandler" />

    <security:logout logout-url="/user/logout"
        logout-success-url="/demo/user/logoutSuccess" />
</security:http>

<bean id="bCryptPasswordEncoder"
    class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />

<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider
        ref="authenticationProvider">
    </security:authentication-provider>
</security:authentication-manager>

Web 服务的rest-security.xml:

<security:http create-session="stateless"
    entry-point-ref="digestEntryPoint">
    <security:intercept-url pattern="/provider/**"
        access="ROLE_WEBAPP" />

    <security:http-basic />
    <security:custom-filter ref="digestFilter"
        after="BASIC_AUTH_FILTER" />
</security:http>

<bean id="digestFilter"
    class="org.springframework.security.web.authentication.www.DigestAuthenticationFilter">
    <property name="userDetailsService" ref="webappDetailsServiceImpl" />
    <property name="authenticationEntryPoint" ref="digestEntryPoint" />
</bean>

<bean id="digestEntryPoint"
    class="org.springframework.security.web.authentication.www.DigestAuthenticationEntryPoint">
    <property name="realmName" value="Contacts Realm via Digest Authentication" />
    <property name="key" value="acegi" />
</bean>

<security:authentication-manager>
    <security:authentication-provider
        ref="restAuthenticationProvider">
    </security:authentication-provider>
</security:authentication-manager>

有人有这种情况的经验吗?


我在这里找到了解决方案:https://blog.codecentric.de/en/2012/07/spring-security-two-security-realms-in-one-application/ https://blog.codecentric.de/en/2012/07/spring-security-two-security-realms-in-one-application/

这篇文章详细说明了我想做的事情。

技巧似乎是添加pattern="/provider/**"到其余的 http 元素。所以正确的剩余安全配置是:

<security:http create-session="stateless"
    entry-point-ref="digestEntryPoint" pattern="/provider/**"
    use-expressions="true">
    <security:intercept-url pattern="/provider/**"
        access="isAuthenticated()" />

    <security:http-basic />
    <security:custom-filter ref="digestFilter"
        after="BASIC_AUTH_FILTER" />
</security:http>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web 服务和用户的 Spring 安全性 的相关文章

  • Glassfish:在部署期间修改 EAR 的部署描述符

    经过几天的搜索 尝试和摇头 我将这个问题发布到 SO 尽管它seems已经得到答复 这是场景 我有一个 EAR 应用程序 目前 包含一个 WAR 和一个 EJB 模块 EJB 模块使用 JPA persistence xml 并且一些无状态
  • 如何将抽象工厂与单例模式结合起来? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在用 java 编码 并且对这些模式很陌生 谁能给我一个也使用单例的工厂抽象的例子 这是一个实现类的示例单例模式 这个实现也是线程安全
  • ResultSet:通过索引检索列值与通过标签检索

    使用 JDBC 时 我经常遇到这样的结构 ResultSet rs ps executeQuery while rs next int id rs getInt 1 Some other actions 我问自己 以及代码作者 为什么不使用
  • MediaPlayer.create() 始终返回 null

    我以前用过媒体播放器 从来没有遇到过这个问题 每当我尝试使用 MediaPlayer create 时 该方法都会给我 null 并且我无法播放声音 我有什么遗漏的吗 public class Game extends Activity p
  • 如何在 Java 中使用 StringUtils?

    我是 Java 初学者 我想用StringUtils replace但 Eclipse 输出 StringUtils cannot be resolved I tried import java lang 但它不起作用 java lang不
  • 强制 Java 最低版本以“java -version:”运行在 Windows 上不起作用

    我想强制应用程序运行的 JVM 最低版本为 1 6 或更高版本 即 1 6 我的理解是 您可以使用 version 命令行参数来执行此操作 我尝试了一下 在Linux下似乎可以正常工作 但在Windows下却不行 LINUX 我在 Linu
  • 如何导入 Java 密钥库中现有的 X.509 证书和私钥以在 SSL 中使用?

    我在 ActiveMQ 配置中有这个
  • 登录后所有页面都应该是https吗?

    这有点难以解释 但我会尽力 有一个网站 每个页面上都有登录表单 其中包含用户名 密码字段 这些页面未使用 SSL 用户填写用户名 密码并提交表单后 表单将被发送到 https 的身份验证页面 对于这种情况我有几个疑问 向 https 页面提
  • Java 中的 MP4 容器编写器

    我想找到一个免费的 Java MP4 容器 编写器 我不需要编码器 只需要能够根据预期值写入正确原子的编码器 Bonus对于这样一个库 也可以编写 有效 F4V 我更喜欢纯 Java 解决方案 而不是使用 JNI 或外部可执行文件的解决方案
  • 为什么我要使用责任链而不是 switch 语句

    考虑一下您已经获得了多次验证 仅当要检查的对象属于某种类型时 这些验证才应生效 为什么我要使用责任链而不是 switch 语句 责任链示例 public class Executor Inject private ValidatorFact
  • 反应式 Spring Webflux REST 控制器内部重定向

    我正在为 spring 反应项目创建简单的控制器服务器 在设置重定向到另一个位置时 我在调用时发现错误http localhost 8080 There was an unexpected error type Internal Serve
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • java中日期转换dd-MMM-yyyy到dd-MM-yyyy

    在Java中将23 Mar 2011转换为23 03 2011的最简单方法是什么 感谢大家 这似乎解决了这个问题 try Calendar cal Calendar getInstance cal setTime new SimpleDat
  • 获取包中声明的所有 Java 类的名称

    我正在编写一个功能 它将有助于将类放入我的程序的某个包中 另外 我只想要子类某个类的类 我需要这些类才能调用它们的静态方法 有没有一种自动的方法来做到这一点 如果是的话 速度慢吗 如果我不清楚 我想要的是这样的 ArrayList
  • 春季MVC。方法参数字段的默认值

    我有一个带有方法测试的简单控制器 RequestMapping produces application json ResponseBody public HttpEntity
  • 如何列出hadoop hdfs中目录及其子目录中的所有文件

    我在 hdfs 中有一个文件夹 其中有两个子文件夹 每个子文件夹大约有 30 个子文件夹 最后 每个子文件夹都包含 xml 文件 我想列出所有 xml 文件 仅给出主文件夹的路径 在本地我可以这样做apache commons io 的 h
  • AndroidAnnotations 和 Dagger

    我正在尝试使用 Dagger 注入 Android 带注释的 Activity java lang IllegalArgumentException No inject registered for members com app serv
  • 如何创建具有同等时间元素的 JavaFX 转换?

    我正在尝试 JavaFX 和动画 尤其是PathTransition 我正在创建一个简单的程序 使球 弹跳 而不使用QuadCurveTo班级 到目前为止 这是我的代码 Ellipse ball new Ellipse 375 250 10
  • 在没有EOF的情况下停止读取java中的输入

    In 问题 如何停止读取输入 我的程序继续运行 要求更多输入 public static void main String args throws Exception BufferedReader br new BufferedReader
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav

随机推荐

  • 如何找出 Instruments 中保留对象的内容?

    我最近将我的 iOS 项目转换为 ARC 视图控制器之一没有调用其 dealloc 方法 并且没有根据 Instruments 进行释放 我已经仔细检查了我的所有属性并将适当的属性设置为弱 我还确保任何将视图控制器作为委托的东西都在 vie
  • ZLIB 解压 - 客户端

    我正在以 ZLIB 压缩输入流 使用 Javascript Ajax JQuery 我需要在客户端解压缩它 有办法这样做吗 我已经在 J AVA 中工作了 如下所示 但需要在客户端执行此操作 url new URL getCodeBase
  • 如何在S3中保存数据流? aws-sdk-go 示例不起作用?

    我正在尝试将给定的数据流持久保存到 S3 兼容存储中 在流结束之前 大小是未知的 大小可能从 5MB 到 500GB 不等 我尝试了不同的可能性 但没有找到比自己实现分片更好的解决方案 我最好的猜测是使用我的流填充固定大小的缓冲区并将其写入
  • 神经网络反向传播算法在Python中不起作用

    我正在用 Python 编写一个神经网络 遵循示例here http page mi fu berlin de rojas neural chapter K7 pdf 考虑到神经网络在训练一万次后未能产生正确的值 在误差范围内 反向传播算法
  • 使用jquery创建动态数组

    我需要一些关于 jquery 数组的帮助 var queryArr markersArray each function index var locationId index var locName markersArray index n
  • 如果线程已经忙,newSingleThreadScheduledExecutor 的工作

    我的要求是创建一个服务 在特定的时间间隔后继续检查队列并处理队列中的元素 为了在 10 秒后安排任务 我使用 ScheduledExecutorService schd Executors newSingleThreadScheduledE
  • Oracle 将行数据作为指定数量的唯一条目的列返回

    我有一个 Oracle 表 它按项目编号标识符充当项目的活动日志 更改跟踪器 我想获取最后三个更改并以列格式列出它们 样本数据 Item No Shipping date Last updated 100 01 Sep 16 24 Aug
  • 从 java 获取 Linux 发行版

    从java中 我得到了我正在工作的操作系统的名称 请参阅下面的代码 System out println System getProperty os name 在 windows xp 中 它打印如下 Windows XP 但在 ubunt
  • 在 Hbase shell 上运行多个查询,无需再次调用 hbase shell

    再次调用 shell 需要时间 我想通过调用 hbase shell 一次来执行多个命令 下面的代码仅运行单个查询 cmd echo put test row1 cf a value1 hbase shell 我想在单个 hbase she
  • 数组[1]会发生什么

    我有一大段代码 旨在获取一个数组并对其进行处理 在当前项目中只有一个元素 因此我没有将变量更改为 char 而是将其声明为 char 数组 1 这样 我不需要修改我的代码 也不需要冒添加任何错误的风险 并且如果需求增长 可以轻松地增加它 它
  • 在 C++11 之前,移动语义是如何解决的?

    我最近一直在阅读移动语义以及它是如何引入到 C 11 中的 主要要点是 通过 窃取 临时对象的指针来创建对象 程序可以变得更加高效 这比对临时对象进行深度复制来创建新对象要高效得多 在 C 11 及更高版本 中 这是通过使用右值引用来实现的
  • javascript从X,Y到X1,Y1的平滑动画

    我想慢慢地将图像 或元素 从其实际的 X Y 位置移动到 X1 Y1 当 的时候distanceX 和 X1 之间is equalY 和 Y1 之间的那个很容易 但是 如果 X 差异为 100 像素 Y 差异为 273 像素怎么办 作为 J
  • C++ 中“词法”一词意味着什么?

    我读到有词法常量 词法运算符 词法范围等 术语 词法 如何改变常量 例如字符串文字 任何运算符或某些标识符的范围的含义 词法 意味着它与源代码相关 例如 1是一个词汇常量 奥托 sizeof char 也是一个编译时整型常量表达式 但它不是
  • 在 PHP 中打印小于和大于符号

    我在尝试打印时遇到问题 lt gt 使用 PHP 编写 HTML 中的符号 我正在附加一个字符串
  • 如何向IDEA添加自定义构建脚本?

    有没有一种简单的方法来配置完全自定义的构建过程非Java项目在 IntelliJ IDEA 中 基本上 我只需要运行自定义 shell 命令 而不是任何更智能的构建过程 尝试将这些 shell 命令配置为自定义工具 文件 gt 设置 gt
  • DRF 序列化器字段已重命名为经过验证的数据中的源

    我有一个 drf 序列化器 其中有一个我想重命名的字段 class UserBulkUploadSerializer serializers Serializer is admin serializers BooleanField requ
  • 如何从 waldo::compare() 返回的对象中提取未完成的值?

    我正在尝试使用一个名为的新 R 包waldo https github com r lib waldo 也请参阅 tidyverse 博客 https www tidyverse org blog 2020 10 waldo 旨在比较数据对
  • 如何使用 jQuery 将子元素从一个父元素移动到另一个父元素[重复]

    这个问题在这里已经有答案了 我正在使用 jQuery数据表 http datatables net 插入 我想将搜索框 dataTables filter 和要显示下拉列表的记录数 dataTables length 从其父元素 dataT
  • oracle中如何使用级联

    create table loginDetails userId varchar 30 cellPhoneNo varchar 10 displayName varchar 20 password varchar 20 secretQues
  • Web 服务和用户的 Spring 安全性

    我们有一个 Web 应用程序 我们希望使用 Spring Security 以两种不同的方式保护它 1 使用登录表单进行身份验证并有权访问某些服务的用户 2 使用摘要身份验证保护的其他服务 用户 密码在请求的标头中传递 由其他 Web 应用