我在Spring MVC中使用Spring Security 2。我将使用的tomcat容器已经具有NTLM支持,并且只有在请求标头中转发其用户名之后才能访问经过身份验证的用户。
我尝试编写自定义AutenticationEntryPoint,其想法是不需要表单/ http-basic登录,因为请求标头已经包含userID。但到目前为止,我找不到实现这一目标的方法。
任何想法和建议都将受到高度赞赏。
感谢。
答案 0 :(得分:1)
看看Waffle。也许Waffle本身并不是你想要的,但它有一个Spring安全过滤器实现,它正在你想要实现的目标的接收端。
答案 1 :(得分:1)
我实际上发现Spring安全性对预先认证的安全性有本机支持。特别是,我查看了org.springframework.security.ui.preauth.AbstractPreAuthenticatedProcessingFilter,它附带了许多实现,其中 RequestHeaderPreAuthenticatedProcessingFilter似乎最有用。或者,也可以通过扩展AbstractPreAuthenticatedProcessingFilter来编写自定义过滤器。完成后,您还需要在应用程序上下文中定义自定义入口点,以及Spring Security所需的其他依赖项。我很抱歉,我很匆忙,没有时间正确地格式化它。希望这会有所帮助。
<bean id="customEntryPoint"
class="org.springframework.security.ui.preauth.PreAuthenticatedProcessingFilterEntryPoint" />
和这个
<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>
和这个
<bean id="userDetailsService" class="yourimplementation.CustomUserDetailsService" />
和这个
<security:http auto-config="false"
access-decision-manager-ref="accessDecisionManager"
entry-point-ref="customEntryPoint">
<security:intercept-url pattern="/*" access="permitAll" />
</security:http>
<security:authentication-manager alias="authenticationManager" />