当前位置: 首页 > 知识库问答 >
问题:

未经身份验证的Spring Security授权

萧韬
2023-03-14

我有一个JavaJSF 2,Spring 3,HiberNate 4JavaEE应用程序,它使用第三方库来验证用户。我将所需的CA证书导入到我的JVM中,将第三个库添加到项目中,并在web.xml.中配置该库从智能卡读取用户详细信息。整个设置正在工作,第三方库将用户带到主页。

以下是我的要求,以确保应用程序。

  • 再次检查该用户是否存在于特定于应用程序的数据库中

我看了这个链接,似乎“身份验证处理过滤器”不建议使用,不适用于Spring3!

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

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

Spring Security:无需身份验证的授权

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

1)使用Spring 3安全更新pom,添加过滤器(我应该选择哪个过滤器)

2)自定义用户详细信息

3) 自定义身份验证提供程序

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

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

共有1个答案

寿嘉悦
2023-03-14

适合这个用例的基本Spring Security类是org。springframework。安全网状物认证。预授权。AbstractPreAuthenticatedProcessingFilter和org。springframework。安全网状物认证。预授权。预验证身份验证提供程序。

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

>

<!-- 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>

配置Spring Security以根据您的需求执行授权

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

如果您当前的身份验证库不使用JavaEE机制,您将需要实现自己的AbstractPreAuthiliatedProcessingFilter子类,该子类知道如何识别用户已进行身份验证。

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

<!-- 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 Security文档中找到更多详细信息。

 类似资料:
  • 我正在尝试使用基本身份验证获取url。我设置用户/密码如下所示。同样的凭证在邮递员中工作。 我认为凭据设置不正确。这里怎么了?错误:

  • 问题内容: 这是我的情况: 一个Web应用程序对许多应用程序执行某种SSO 登录的用户,而不是单击链接,该应用就会向正确的应用发布包含用户信息(名称,pwd [无用],角色)的帖子 我正在其中一个应用程序上实现SpringSecurity以从其功能中受益(会话中的权限,其类提供的方法等) 因此,我需要开发一个 自定义过滤器 -我猜想-能够从请求中检索用户信息,通过自定义 DetailsUserSe

  • 成功使用带有Azure AD v2身份验证的图形endpoint。一切都很完美。 图形终结点不支持outlook任务,因此需要使用outlook api终结点outlook.office.com/api。 我在使用scope参数进行身份验证时建立作用域。使用相同的代码,只是不同的endpoint。 https://graph.microsoft.com/beta/me/messages-工作htt

  • OAuth术语已经困扰我很久了。OAuth授权是像一些人建议的那样,还是认证? 如果我错了,请纠正我,但我一直认为授权是允许某人访问某个资源的行为,而OAuth似乎没有任何实际允许用户访问给定资源的实现。OAuth实现所讨论的都是为用户提供一个令牌(签名的,有时是加密的)。然后,每次调用都会将该令牌传递到后端服务endpoint,在后端服务endpoint上检查该令牌的有效性,这也不是OAuth的

  • 我的代码在这里:代码重新发布是因为我想问一个更直接的问题。如何在未经身份验证的用户和经过身份验证的用户之间切换?我的未经验证的文件似乎已缓存,我使用了以下方法: 在我剩下的api代码之前,它仍然不能工作。谢谢你的帮助 注意:我知道它不起作用,因为我在切换配置/凭据提供程序后立即使用lambda进行调用,并且只有授权用户才能调用此方法。 编辑@behrooziAWS答案: API代码: 完整错误:B

  • 我有一个已经完成的j2ee(jsf、cdi、jpa)应用程序,它完美地使用了ApacheShiro,它工作得非常好,我喜欢Shiro注释(hasRole、hasPermission等)。 现在,该项目还必须能够通过SiteMinder进行身份验证,我的问题是: 我如何设置一个领域来处理SiteMinder身份验证而不丢失Shiro授权(似乎SiteMinder会在HTTP头中给我用户名和Rolen