如何在不显式配置策略的情况下获取对 SessionAuthenticationStrategy 的引用?

2024-03-21

在基于 Spring Security 3.2 的应用程序中,我有一个显式配置UsernamePasswordAuthenticationFilter,需要参考sessionAuthenticationStrategy(为了调用.onAuthentication).*

The sessionAuthenticationStrategy是默认创建的<security:http> (HttpSecurityBeanDefinitionParser).

我的问题:我怎样才能获得参考SessionAuthenticationStrategy无需配置完整的SessionAuthenticationStrategy显式的,以便我可以在 XML 配置中注入这个引用?

<security:http auto-config="false" use-expressions="true"
    entry-point-ref="loginUrlAuthenticationEntryPoint" 
    access-decision-manager-ref="httpAccessDecisionManager">
    ...
    <security:custom-filter
             ref="usernamePasswordAuthenticationFilter"
             position="FORM_LOGIN_FILTER"/>
    ...
</security:http>

...

<bean id="usernamePasswordAuthenticationFilter"
    class=" o.s.scurity.web.authentication.UsernamePasswordAuthenticationFilter">

   <property name="sessionAuthenticationStrategy" ref="????">   <!-- ?? ->
   ...
</bean>

*我真实的UsernamePasswordAuthenticationFilter是一个定制的子类,但这对于这个问题来说应该不重要


我已经看过了HttpSecurityBeanDefinitionParser(以及HttpConfigurationBuilder.createSessionManagementFilters())这是负责解析的类security:http标签并用于创建SessionAuthenticationStrategy bean.

因此我知道 Spring Security 3.2.5.RELEASE 创建(在我的配置中)CompositeSessionAuthenticationStrategybean 并使用它作为会话策略。该 bean 将获得默认名称:org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy#0

所以我当前的解决方法是通过名称引用该 bean:

<bean id="usernamePasswordAuthenticationFilter"
     class=" o.s.scurity.web.authentication.UsernamePasswordAuthenticationFilter">

    <property name="sessionAuthenticationStrategy">
        <ref
           bean="org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy#0"/>                
    </property>
    ...
 </bean>

此解决方法有一些严重的局限性:

  • 当较新版本的 spring security 以其他方式工作(创建其他 bean)时,它将失败。
  • 当有另一个的时候CompositeSessionAuthenticationStrategy这就是名字的创建者ReaderContext.generateBeanName那么这种方法可能会失败,因为#0也许成为#1(取决于创建 Bean 的顺序)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不显式配置策略的情况下获取对 SessionAuthenticationStrategy 的引用? 的相关文章

随机推荐

  • 如何从应用程序后台录制视频:Android

    我正在开发一个应用程序 它将能够通过使用从应用程序后台录制视频Service 问题描述 1 我创建了一个活动来启动服务 如下所示 package com android camerarecorder import android app A
  • 由于缩放问题,响应式网站无法正确显示水平线

    我正在使用CSS向网站添加响应式功能 该网站已经属于他们一段时间了 现在正在添加响应式功能 以便它可以支持移动版本 我面临一个问题 假设有多行由水平线分隔 在某个地方我正在使用hr在某些地方我只是简单地使用div to 这是小提琴的示例链接
  • 在 ASP:Repeater 中查找控件

    我正在尝试访问中继器内的控件 该控件位于 标记内 我正在使用 FindControl 但它总是显示为 Null 我究竟做错了什么 我的猜测是 FindControl 只能用于记录级事件 例如 ItemDataBound protected
  • 评估连接速度的最佳方法

    我正在开发一个应用程序 需要通过流媒体获取音乐文件以进行现场播放 在请求歌曲 api 中 我可以指定带宽 例如 50kbps 100kbps 300 600 或 1 Mbps 带宽越大 获取文件的时间就越多 因为我不希望用户受到限制 所以我
  • 在 R Shiny 中捕获选择输入?

    我试图捕获当人们按下应用程序上的 获取 URL 按钮时所选择的 URL 应该发生的是event reactive 应该看看input go button并看到它已被按下 然后它应该执行表达式以从选择输入中获取所选的 url 不幸的是它什么也
  • FacesContext 和“Servlet”上下文

    有没有与 FacesContext 等效的东西 但是在 servlet 环境中 我有一些 DAOSessionManager 来处理我的数据库的事务 当当前页面是使用 JSF 编写时 我可以使用 FacesContext 来识别当前的 ht
  • python ssh 密码提示

    我试图在使用 ssh 时根据提示自动传递密码 通常 rsa 密钥用于防止密码提示 但我不能保证每个用户都正确设置 因此我希望脚本在用户给出密码时自动设置密码 这里是 ssh subprocess Popen ssh localhost py
  • 使用 xPath 修改 XML 文件

    我想使用 xPath 修改现有的 XML 文件 如果该节点不存在 则应该创建它 如果需要 还可以创建它的父节点 一个例子
  • 当手机方向改变时,EditText如何保留其值而不是textview?

    Edittext 的特别之处在于它可以保留值 但不能保留 Textview 和其他一些小部件 我们必须为它们使用 onSavedInstance 方法 EditText 背后的魔力是什么 特别是它可以保留值 如果有人能告诉它内部是如何工作的
  • Rails:未定义的方法“paginations_per”

    我正在安装一个名为 Carrier 的 gemhttps github com stanislaw carrier blob master Gemfile https github com stanislaw carrier blob ma
  • 在自定义帖子类型中显示父分类

    我有一组自定义帖子类型的学校 位置顺序如下 London 1 Oxford Road 2 Cambridge Road Paris 1 Napoleon Road 2 Tower Road 如何更改以下内容以便输出位置父级而不是位置子级 b
  • 迭代 PySpark GroupedData

    假设原始数据如下 Competitor Region ProductA ProductB Comp1 A 10 15 Comp1 B 11 16 Comp1 C 11 15 Comp2 A 9 16 Comp2 B 12 14 Comp2
  • C# 4:确定动态调用中的参数传递语义

    在 C 4 中 当从 DynamicObject 派生并重写 TryInvokeMember 时 如何确定在调用站点提供的任何参数是否已在不带 out 或 ref 语义的情况下传递 我可以在提供的活页夹中看到一些包含此信息的私有字段 即 M
  • 从 mysql 列中删除所有或特定的不可打印字符

    我想从 mysql 的列中删除所有或特定的不可打印字符 我认为这可以通过使用来实现正则表达式 替换 功能但我不知道如何 不可打印字符的 Ascii 值从 o 到 31 我想了一个解决方案 如下所示 如果我编写一个函数 从输入字符串中一一读取
  • 闪亮的导航栏页面中的搜索字段

    我正在尝试将全球搜索字段纳入我的navbarPage经过一些tabPanel 我不确定这是否可能 因为我所有的测试都产生了textInput之外的navbar rStudio 闪亮的布局指南指向引导导航栏文档 http getbootstr
  • Jquery Drag-Drop(获取要放入的元素)

    我正在尝试检测物体被放入哪个单元格 table tr td class weekday Sun td td class weekday Mon td td class weekday Tue td td class weekday Wed
  • 如何使用 DLLImport 将字符串从 C# 传递到 C++(以及从 C++ 传递到 C#)?

    我很长一段时间以来一直试图在 C 和 C 之间发送字符串 但还没有成功 所以我的问题很简单 有谁知道将字符串从 C 发送到 C 以及从 C 发送到 C 的方法吗 一些示例代码会有帮助 在你的c代码中 extern C declspec dl
  • 如何调用 javascript 对象内部的方法

    我刚刚学习如何最好地组织我的 javascript 代码 我对我编写的这一小段代码有一个疑问 var reportsControllerIndex plotMapPoints function data plots points drawM
  • iOS 9 上的 Html5 视频 blob

    通过 xhr 将视频 mp4 H264 加载到 blob 然后使用此类 blob 作为 HTML5 Video 元素的源 var vsource window URL createObjectURL blob var player docu
  • 如何在不显式配置策略的情况下获取对 SessionAuthenticationStrategy 的引用?

    在基于 Spring Security 3 2 的应用程序中 我有一个显式配置UsernamePasswordAuthenticationFilter 需要参考sessionAuthenticationStrategy 为了调用 onAut