Java 从主体到用户obj的Spring OAuth类转换

Java 从主体到用户obj的Spring OAuth类转换,java,xml,spring,oauth,Java,Xml,Spring,Oauth,我们最近将Spring安全性从3.1.3升级到了4.01,并且我们不得不对OAuth配置进行一些更改,这使得一些请求在试图将主体强制转换为用户时,由于类强制转换而中断——具体来说,是客户端id的字符串形式 以下是我们配置的相关部分 对于上下文,我们的标准身份验证管理(返回主体的用户): 其次,我们的过滤器在oauth客户端详细信息表中查找内容并添加auth: <bean id="oauth2ProviderFilter" class="blah.blah.blah.BlahOAuth2

我们最近将Spring安全性从3.1.3升级到了4.01,并且我们不得不对OAuth配置进行一些更改,这使得一些请求在试图将主体强制转换为用户时,由于类强制转换而中断——具体来说,是客户端id的字符串形式

以下是我们配置的相关部分

对于上下文,我们的标准身份验证管理(返回主体的用户):


其次,我们的过滤器在oauth客户端详细信息表中查找内容并添加auth:

<bean id="oauth2ProviderFilter" class="blah.blah.blah.BlahOAuth2AuthenticationProcessingFilter">
    <property name="authenticationManager">
        <bean class="org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationManager">
            <property name="tokenServices" ref="oauth2TokenServices" />
        </bean>
    </property>
</bean>
<bean id="oauth2TokenServices" class="org.springframework.security.oauth2.provider.token.DefaultTokenServices">
    <property name="tokenStore" ref="tokenStore" />
    <property name="supportRefreshToken" value="true" />
</bean>
<bean id="tokenStore" class="org.springframework.security.oauth2.provider.token.JdbcTokenStore">
    <constructor-arg ref="dataSource" />
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <!-- etc... -->
</bean>

正在检查标头中的令牌:

<bean id="oauth2ClientCredentialsTokenEndpointFilter"
    class="org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter">
    <constructor-arg index="0" value="/oauth/authorize" />
    <property name="authenticationManager" ref="oauthAuthenticationManager" />
</bean>
<bean id="oauthAuthenticationManager" class="org.springframework.security.authentication.ProviderManager">
    <constructor-arg>
        <list>
            <ref bean="oauthDaoAuthenticationProvider"/>
        </list>
    </constructor-arg>
</bean>
<bean id="oauthDaoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <property name="userDetailsService" ref="oauthUserDetailService" />
    <property name="passwordEncoder" ref="oauthPasswordEncoder" />
</bean>

目前我们最好的理论是端点过滤器中的某些东西停止了对用户对象的查找,而只是返回用户id——这是已知的情况吗?我们的设置哪里出了问题

<bean id="oauth2ClientCredentialsTokenEndpointFilter"
    class="org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter">
    <constructor-arg index="0" value="/oauth/authorize" />
    <property name="authenticationManager" ref="oauthAuthenticationManager" />
</bean>
<bean id="oauthAuthenticationManager" class="org.springframework.security.authentication.ProviderManager">
    <constructor-arg>
        <list>
            <ref bean="oauthDaoAuthenticationProvider"/>
        </list>
    </constructor-arg>
</bean>
<bean id="oauthDaoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <property name="userDetailsService" ref="oauthUserDetailService" />
    <property name="passwordEncoder" ref="oauthPasswordEncoder" />
</bean>