我需要以这种方式自定义我的身份验证过程:
- 客户端使用“特殊” URL 参数发送请求(REST API)
- 服务器调用第三方服务传递参数并接收用户名
- 服务器按名称查找数据库,这是经过身份验证的主体。
我将我的服务器端 (2+3) 分成两部分 - (2) 的自定义过滤器,它获取用户名 - 和一个自定义userdetailservice
的 for(3),它通过在数据库中查找名称来构建主体。
但我无法security.xml
正确构建我的 - 每次似乎它根本不处理过滤器。我认为问题出在第一个(http)节点上,但我不明白应该为过滤器设置什么位置。这是我的配置:
<http use-expressions="true" auto-config="true" authentication-manager-ref="authenticationManager">
<intercept-url pattern="/*" access="isAuthenticated" />
<custom-filter ref="casServiceTicketFilter" position="FIRST"/>
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="wliAuthenticationService"/>
</authentication-manager>
<b:bean id="casServiceTicketFilter" class="org.WLICASAuthenticationFilter">
<b:property name="casTicketValidateURL" value="${cas.ticket.validate.url}"/>
<b:property name="authenticationManager" ref="authenticationManager"/>
</b:bean>
<b:bean id="wliAuthenticationService" class="org.WLIUserDetailService"/>
PS-请不要告诉我 Spring 具有开箱即用的 CAS 支持。配置有点不同,所以我需要创建自己的服务票证验证器实现