【发布时间】:2016-01-08 06:05:07
【问题描述】:
我有一个关于 Spring Security 的问题。
现在我使用 siple siteMinderFilter 来限制对多个页面的访问:
RequestHeaderAuthenticationFilter siteMinderFilter = new RequestHeaderAuthenticationFilter (ignored);
siteMinderFilter.setPrincipalRequestHeader("SM_USER");
siteMinderFilter.setAuthenticationManager(authenticationManager());
在 SM_USER 错误的情况下,我希望使用我的 SmUserFailureHandler:
@Component
public class SmUserFailureHandler extends SimpleUrlAuthenticationFailureHandler {
private Logger log = Logger.getLogger(SmUserFailureHandler.class);
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception)
throws IOException, ServletException {
super.onAuthenticationFailure(request, response, exception);
log.debug("got AuthenticationException");
if(exception.getClass().isAssignableFrom(PreAuthenticatedCredentialsNotFoundException.class)) {
log.debug("got PreAuthenticatedCredentialsNotFoundException");
}
}
}
然后在spring配置类中
@Bean
public SmUserFailureHandler smUserFailureHandler(){
return new SmUserFailureHandler();
}
但现在我无法理解如何将它包含在我的 authenticationProvider 中。我发现使用这种 FailureHandler 的唯一位置是登录表单
http.formLogin().loginPage("/my/login/page/").failureHandler(smUserFailureHandler());
但我希望它适用于所有需要 SM_USER 的资源。
我该如何实现它?
【问题讨论】:
标签: java spring-mvc authentication spring-security siteminder