Spring Security授权无需认证

2023-12-31

我有一个 Java JSF 2、Spring 3、Hibernate 4 Java EE 应用程序,它使用第三方库来对用户进行身份验证。我将所需的 CA 证书导入到 JVM 中,将第三个库添加到项目中并在 web.xml 中进行配置。图书馆从智能卡读取用户详细信息。整个设置正在运行,用户将被第三方库带到主页。

以下是我对确保应用程序安全的要求。

  • 再检查一次用户是否存在于应用程序特定数据库中
  • 从应用程序数据库获取该用户的角色
  • 保护我的 JSF 页面
  • 保护我的应用程序服务

我查看了这个链接,似乎“AuthenticationProcessingFilter”已被弃用并且不适用于 Spring 3!

http://codersatwork.wordpress.com/2010/02/13/use-spring-security-for-authorization-only-not-for-authentication/ http://codersatwork.wordpress.com/2010/02/13/use-spring-security-for-authorization-only-not-for-authentication/

我也看了这个,但我不明白还需要什么其他步骤/配置。

spring-security:无需身份验证的授权 https://stackoverflow.com/questions/1322135/spring-security-authorization-without-authentication

如果有人能概述我仅通过授权实现 Spring Security 所需的所有项目,我将非常感激。这就是我想出来的。

1)使用spring 3 security更新pom,添加一个过滤器(我应该选择哪个过滤器)

2) 自定义用户详细信息

3)自定义DaoAuthenticationProvider

4) 在 application-context.xml 中注册此自定义身份验证提供程序

5)注册访问决策管理器进行授权


适合此用例的 Spring Security 基类是 org.springframework.security.web.authentication.preauth.Abs​​tractPreAuthenticatedProcessingFilter 和 org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider。

如果您当前的身份验证库导致用户以标准 Java EE 方式进行身份验证(即在 HttpServletRequest 实例上调用 getUserPrincipal() 返回经过身份验证的用户的主体),您需要做的事情应该类似于:

  1. 实现接口 org.springframework.security.core.userdetails.UserDetailsS​​ervice ,它检查用户是否存在于应用程序数据库中,如果不存在则抛出 UsernameNotFoundException
  2. 为 Spring Security 添加以下设置:

    <!-- Declare the user details for database check -->
    <bean id="userDetails" class="com.yourpackage.DatabaseUserDetails"/>
    
    <!-- Default empty auth manager -->
    <security:authentication-manager alias="authenticationManager"/>
    
    <!-- Use default settings from the jee namespace -->
    <security:http>
        <security:jee mappable-roles="IS_AUTHENTICATED_FULLY" user-service-ref="userDetails"/>
    </security:http>
    
  3. 配置 Spring Security 以根据您的要求执行授权

security:jee 初始化过滤器和身份验证提供程序并将您的用户服务插入提供程序。

如果您当前的身份验证库不使用 Java EE 机制,您将需要实现自己的 AbstractPreAuthenticatedProcessingFilter 子类,它知道如何识别用户已通过身份验证。

然后,您可以将默认的预身份验证过滤器替换为您自己的过滤器,因此配置如下所示:

<!-- Declare the user details for database check -->
<bean id="userDetails" class="com.yourpackage.DatabaseUserDetails"/>

<!-- Define provider -->
<bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
<property name="preAuthenticatedUserDetailsService">
  <bean id="userDetailsServiceWrapper"
      class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
    <property name="userDetailsService" ref="userDetails"/>
  </bean>
</property>
</bean>

<!-- Define alias for the authentication manager -->
<authentication-manager alias="authenticationManager">
   <security:authentication-provider ref="preauthAuthProvider" />
</authentication-manager>

<!-- Declare the custom filter -->
<bean id="authenticationFilter" class="com.yourpackage.AuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager"/>
</bean>

<security:http>
    <security:custom-filter ref="authenticationFilter" position="PRE_AUTH_FILTER"/>
</security:http>

您可以在以下位置找到更多详细信息Spring安全文档 http://docs.spring.io/spring-security/site/docs/3.1.x/reference/preauth.html.

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

Spring Security授权无需认证 的相关文章

随机推荐

  • 清除 TList 或 TObjectList

    我对使用什么来存储列表中的对象有点困惑 到目前为止我已经使用过TList并释放循环中的每个项目 然后我发现TObjectList自动执行此操作Free 然后我从文档中看到了这个TList Clear Call Clear清空 Items 数
  • C Unix 管道示例

    尝试实现一个shell 主要是管道 我已经编写了这个测试用例 我希望将 ls 简单地通过管道传输到 wc 它肯定不会按预期工作 它将 ls 打印到终端 然后打印内存耗尽 我非常不知道如何解决这个问题并让它发挥作用 find path 在我的
  • 从多个 SQL 文件恢复 SQL

    我有一个包含 400 多个 sql 文件的数据库备份 foreach表有一个单独的sql文件 是否可以将所有这些文件一起导入数据库 如果可以的话你能告诉我该怎么做吗 备份也是一个 gzip 压缩的 tar 文件 有没有办法从压缩文件中恢复
  • 动态xpath表达式

    美好的一天 同事们 请告诉我如何进行动态 xpath 解析 例如 而不是写 domXPath gt query id article id 18 gt 写类似的东西 domXPath gt query id article id 因为在我的
  • 现代和旧的编译器是用什么编写的?

    作为编译器 而不是解释器 只需要翻译输入而不运行它 其本身的性能应该不会像解释器那样有问题 因此 您不会用 Ruby 或 PHP 编写解释器 因为它太慢了 但是 编译器呢 如果您用脚本语言编写一个编译器 甚至可能具有快速开发的特点 您可能会
  • 使用通用接口约束时的协变/逆变难题

    public interface IShape public class Rectangle IShape public class Base public class Derived Base public interface IFoo
  • 如何让 ASP.NET AJAX 通过 GZip 压缩发送其 JSON 响应?

    我在 IIS7 中启用了压缩 并且它对除 ASP NET AJAX 构建的响应之外的所有响应都按预期工作 我有一个向客户端提供数据的网络服务 当直接调用Web服务时 它被正确压缩 但是 当通过 ASP NET AJAX 调用时 JSON 响
  • 同步和异步活动

    谁能帮助我理解同步 and 异步Android 中的活动 Android 中的同步和异步活动到底意味着什么 StartActivity StartSubActivity and StartAcivityForResult同步或异步启动活动
  • 多语言安装

    我正在尝试使用以下命令安装 多语言 pip install polyglot 但我收到以下错误 Command python setup py egg info failed with error code 1 in C Users K 1
  • Realm:比较原始类型的 List,例如:List

    比较 Realm 字符串列表的预期方法是什么 我正在尝试比较 Realm 中的两个字符串列表 如下所示 func testRealmListOfStrings let strings a b c let list1 List
  • 为什么条件移动不能正常工作

    在我编译下面的代码后 该功能似乎没有按预期工作 int cread int xp return xp xp 0 我提取了汇编版本中的对应部分 如下所示 xp在寄存器中 edx movl 0 eax testl edx edx cmovne
  • 高图表中的条件标记颜色

    我正在使用 Highcharts 我想用不同的颜色填充折线图中的标记 例如 当变量 a 为 1 时 则用红色填充标记 否则用绿色填充 可以这样做吗 这是代码 http jsfiddle net EnyCJ 1 http jsfiddle n
  • 如何获取mysql中两个日期之间的时间记录?

    我正在制作一个考勤系统 它包含两个日期之间的时间表 例如 晚上 10 00 到凌晨 3 00 如何从 mysql 数据库中检索时间范围在 2 个日期之间的行 我已经知道如何在 mysql 中使用 BETWEEN 我的问题是如何在不知道确切时
  • 如何从时间戳转换为 Mongo ObjectID

    我知道我们可以使用getTimestamp 从 ObjectId 中检索时间戳 但是有什么方法可以从时间戳生成 ObjectId 吗 更具体地说 如果我有一个输入month and year 然后我想将其转换为Mongo对象ID要在数据库中
  • 使用 jquery 遍历表格单元格

    我有一个包含可变数量列的表 我编写了一个函数来迭代每行中的每个单元格以执行以下操作 检查是否存在输入 检索输入的值 将饼图附加到条件 1 计算结果为 true 的任何单元格 这是我的代码 function addPieCharts var
  • Kubernetes minikube 教程后无法停止 10 个容器

    docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7523fd2c20c7 gcr io google containers k8s dns sidecar am
  • Drupal 7 示例模块,找不到页面,为什么?

    我编写了一个简单的测试模块示例 2个文件 test module test info 并在drupal 7模块中启用了它们 我清除了所有缓存 但当我尝试访问 localhost drupal hello 时 我得到 drupal 404 页
  • 如何在python中实现multiprocessing.Queue的LIFO?

    我了解队列和堆栈之间的区别 但是如果我生成多个进程并在它们之间发送消息multiprocessing Queue如何访问首先放入队列中的最新元素 您可以使用多处理管理器 https docs python org 3 library mul
  • 构建 Clojure 源代码的惯用方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对人们如何构建 Clojure 源代码感兴趣 由于习惯了 Java 我非常熟悉每个源代码文件一个类的范例 将所有数据和方法定义与适当的注释和注
  • Spring Security授权无需认证

    我有一个 Java JSF 2 Spring 3 Hibernate 4 Java EE 应用程序 它使用第三方库来对用户进行身份验证 我将所需的 CA 证书导入到 JVM 中 将第三个库添加到项目中并在 web xml 中进行配置 图书馆