0

我正在尝试使用 spring 2.0 安全性配置请求标头身份验证,我是一个完整的新手,所以请多多包涵。从doc中,他们给出了一个使用 siteminder 的示例配置文件。

在我的场景中,请求头中会有一个用户名和用户组,分别使用 CC_USER 和 CC_USER_GROUP 的键。所以我将文件调整为如下(见下文)。

我知道在外部系统中,用户已经使用某种类型的单点登录进行了身份验证,当控制权到达我的应用程序时,我们只需要检查 CC_USER 和 CC_USER_GROUP 的请求标头。

问题1:下面的示例使用“userDetailsS​​ervice”。这是我需要实施的吗?这是我要检查 CC_USER 和 CC_USER_GROUP 的请求标头的地方吗?

问题2:我可以在某处下载使用请求标头身份验证的完整示例吗?我做了很多谷歌搜索,但并没有真正找到很多帮助。

问题3:我只想对一些虚拟用户进行硬编码以进行测试,就像他们在文档中所做的那样。如何将以下内容合并到我的请求标头配置中?

<authentication-provider>
    <user-service>
      <user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" />
      <user name="bob" password="bobspassword" authorities="ROLE_USER" />
    </user-service>
  </authentication-provider>

我修改后的示例配置文件(基于 docs 中的 siteminder 文件):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:security="http://www.springframework.org/schema/security"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/context/spring-context-2.5.xsd
       http://www.springframework.org/schema/security
       http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">

    <bean id="ssoFilter"
        class="org.springframework.security.ui.preauth.header.RequestHeaderPreAuthenticatedProcessingFilter">
        <security:custom-filter position="PRE_AUTH_FILTER" />
        <property name="principalRequestHeader" value="CC_USER" />
        <property name="authenticationManager" ref="authenticationManager" />
    </bean>

    <bean id="preauthAuthProvider"
        class="org.springframework.security.providers.preauth.PreAuthenticatedAuthenticationProvider">
        <security:custom-authentication-provider />
        <property name="preAuthenticatedUserDetailsService">
            <bean id="userDetailsServiceWrapper"
                class="org.springframework.security.userdetails.UserDetailsByNameServiceWrapper">
                <property name="userDetailsService" ref="userDetailsService" />
            </bean>
        </property>
    </bean>

    <security:authentication-manager
        alias="authenticationManager" />
</beans>
4

1 回答 1

1
  1. UserDetailsS​​ervice只是一个接口,你需要实现。它只有一种方法可以通过用户名从数据库加载用户,并返回带有用户信息的 UserDetails 对象(这里您还可以保留用户组信息)。该服务与请求标头无关。我认为,检查请求标头的最佳位置是RequestHeaderPreAuthenticatedProcessingFilter
  2. 你在谈论RequestHeaderAuthenticationFilter吗?我认为文档非常清楚。
  3. 如果您实现自己的用户服务,xml 中的硬编码用户将不起作用
于 2012-04-08T21:43:48.350 回答