Java Spring安全性:如何添加失败处理程序
我有一个关于春季安全的问题 现在我使用sipleJava Spring安全性:如何添加失败处理程序,java,spring-mvc,authentication,spring-security,siteminder,Java,Spring Mvc,Authentication,Spring Security,Siteminder,我有一个关于春季安全的问题 现在我使用siplesiteMinderFilter来限制对几个页面的访问: RequestHeaderAuthenticationFilter siteMinderFilter = new RequestHeaderAuthenticationFilter (ignored); siteMinderFilter.setPrincipalRequestHeader("SM_USER"); siteMinderFilter.setAuthenti
siteMinderFilter
来限制对几个页面的访问:
RequestHeaderAuthenticationFilter siteMinderFilter = new RequestHeaderAuthenticationFilter (ignored);
siteMinderFilter.setPrincipalRequestHeader("SM_USER");
siteMinderFilter.setAuthenticationManager(authenticationManager());
在SM_用户错误的情况下,我希望使用我的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");
}
}
}
然后在春季对话课上
@Bean
public SmUserFailureHandler smUserFailureHandler(){
return new SmUserFailureHandler();
}
但现在我无法理解如何将其包含在我的authenticationProvider中。我发现使用这种FailureHandler的唯一位置是登录表单
http.formLogin().loginPage("/my/login/page/").failureHandler(smUserFailureHandler());
但我希望它适用于所有需要SM_用户的资源
如何实现它?您正在使用身份验证FailureHandler。。。身份验证可以成功,也可以不成功-您不关心资源。如果身份验证成功-您拥有已登录的用户-则存在授权,即检查用户是否拥有请求资源的权限的过程。您需要生成/处理拒绝访问的情况 更简单的方法是重写处理AccessDeniedException时的逻辑(但这是为每一次拒绝访问生成的)
资料来源:
如果您想为给定的资源生成特殊消息,那么您必须更改其他内容。也许它只需要一个AccessDecisionVoter,但我没有用过
<bean id="exceptionTranslationFilter"
class="org.springframework.security.ui.ExceptionTranslationFilter">
<property name="authenticationEntryPoint" ref="authenticationEntryPoint" />
<property name="accessDeniedHandler" ref="accessDeniedHandler" />
</bean>
<bean id="accessDeniedHandler" class="org.springframework.security.ui.AccessDeniedHandlerImpl">
<property name="errorPage" value="/noaccess.jsp" />
</bean>